home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-07-24 | 131.9 KB | 6,841 lines |
-
- .title Console driver v1.09c+12 / (C)1990 ö┌ûφî─üÖ, 1998/07/24 ùºë╘éªéΦÄq.
-
-
- VERSION: .reg '1.09c+12'
- VERSION_ID: .equ 'e12 '
- DATE: .reg '1998/07/24'
- AUTHOR: .reg 'ùºë╘éªéΦÄq'
-
-
- # symbols
- # __XCONC XCONC âfâoâCâXé≡Ägùpé╖éΘ
- # __EMACS EMACS îné╠âLü[æÇì∞é╔é╖éΘ
- # __EM_FONT_TAB â^âué╠âtâHâôâgé≡ MicroEMACS é╞ô»é╢éαé╠é╔é╖éΘ
- # __EM_FONT_CR ëⁿìsé╠âtâHâôâgüV
- # __EM_FONT æSé─é╠âtâHâôâg(î╗ì▌é═â^âuüAëⁿìs)é≡ MicroEMACS é╞ô»é╢éαé╠é╔é╖éΘ
- # __UPPER 16 ÉiÉöé╠ aü`f é≡æσò╢ÄÜé╔é╖éΘ
- # __BUF_POS buffer-position(C-x =)é≡ùLî°é╔é╖éΘ
-
- # __EOBCUR âJü[â\âïé¬âoâbâtâ@ûûö÷é╠ò╢ÄÜé╠ăé▄é┼ê┌ô«é╖éΘ
- __EOBCUR: .equ 1
-
- .ifdef __EM_FONT
- .ifndef __EM_FONT_TAB
- __EM_FONT_TAB: .equ 1
- .endif
- .ifndef __EM_FONT_CR
- __EM_FONT_CR: .equ 1
- .endif
- .endif
-
-
- * Include File -------------------------------- *
-
- .include dos.mac
- .include macro.mac
- .include console.mac
- .include doscall.mac
- .include keycode.mac
- .include iocscall.mac
- .include gm_internal.mac
-
-
- * Fixed Number -------------------------------- *
-
- WIDTH: .equ 96
- GETSMAX: .equ 69 ò╢ÄÜù±ôⁿù═é╠ì┼æσâoâCâgÉö(è∩Éö)
- .fail (GETSMAX.and.1).eq.0
- RL_PASTBUF: .equ general_work+GETSMAX+3 C-^,\ ùpé╠âyü[âXâgâoâbâtâ@
- KBbuf_Default: .equ 1024
- BLINKCYCLE: .equ 50
- TEXTSAVESIZE: .equ 128*16*2 îà*âëâCâô*û╩
- IOBUFSIZE: .equ TEXTSAVESIZE
-
- ;ctype_table
- IS_MULTIBYTE: .equ %1000_0000
- IS_HEXNUMBER: .equ %0100_0000
- IS_DECIMAL: .equ %0010_0000
- IS_MB_bit: .equ 7
- IS_HEX_bit: .equ 6
- IS_DEC_bit: .equ 5
-
- CTRL: .equ -$40
-
-
- * Instruction Code ---------------------------- *
-
- RTS: .equ $4e75
- MOVEM: .equ $48e7
-
-
- * I/O Address --------------------------------- *
-
- TIMERA_VEC: .equ $134
- CIRQ_VEC: .equ $138
-
- TEXT_VRAM: .equ $e00000
-
- CRTC_R21: .equ $e8002a
- CRTC_R22: .equ $e8002c
- CRTC_MODE: .equ $e80480
- TEXTPAL: .equ $e82200
-
- MFP_GPIP: .equ $e88001
- MFP_DDR: .equ $e88005
-
-
- * IOCS Work ----------------------------------- *
-
- KEYSTAT: .equ $800
- LEDSTAT: .equ $810
- SFTSTAT: .equ $811
- KBUFNUM: .equ $812
- CSRSWITCH: .equ $992
- TXADR: .equ $944
- TXSTOFST: .equ $948
- CSRXMAX: .equ $970
- CSRX: .equ $974
- FIRSTBYTE: .equ $990
- TXCOLOR: .equ $994
- TXUSEMD: .equ $9dd
- SKEYMOD: .equ $bc1
- MPUTYPE: .equ $cbc
-
-
- * Macro --------------------------------------- *
-
- TopChk: .macro areg ;æOé╔û▀é╡é╜ÅΩìç
- .local skip
- cmpa.l (buffer_top,a6),areg
- bcc skip
- adda.l (buffer_size,pc),areg
- skip:
- .endm
-
- EndChk: .macro areg ;1byteÉié▀é╜ÅΩìç
- .local skip
- cmpa.l (buffer_end,a6),areg
- bcs skip
- movea.l (buffer_top,a6),areg ;é┐éσé┴é╞é╛é»æ¼éó
- skip:
- .endm
- EndChk2: .macro areg ;òíÉöbyteÉié▀é╜ÅΩìç
- .local skip
- cmpa.l (buffer_end,a6),areg
- bcs skip
- suba.l (buffer_size,pc),areg
- skip:
- .endm
-
- GMcall: .macro callno
- moveq #.low.callno,d1
- bsr gm_tgusemd
- .endm
-
- KEYbtst: .macro keyname
- btst #keyname.and.%111,(KEYSTAT+keyname.shr.3)
- .endm
- LEDbtst: .macro keybit
- btst #keybit,(LEDSTAT)
- .endm
- SFTbtst: .macro keybit
- btst #keybit,(SFTSTAT)
- .endm
-
- DB_PUTC: .macro char
- PUSH d0-d1/a0
- moveq #char,d1
- * IOCS _B_PUTC
- movea.l (b_putc_orig,pc),a0
- jsr (a0)
- POP d0-d1/a0
- .endm
-
-
- * Offset Table -------------------------------- *
-
- bufstruct_size: .equ 32
- .offset -4
- buffer_id: .dc.l 1 'hmk*'
- buffer_top: .ds.l 1 âoâbâtâ@ɵô¬âAâhâîâX
- buffer_old: .ds.l 1 âèâôâOâoâbâtâ@é╠êΩö╘î├éóâfü[â^é╠âAâhâîâX
- buffer_now: .ds.l 1 î╗ì▌é╠ìsé╠ɵô¬
- buffer_write: .ds.l 1 Åæé½ì₧é▌â|âCâôâ^
- buffer_end: .ds.l 1 âoâbâtâ@ûûö÷â|âCâôâ^
- .ds.l 2 ûóÄgùp(0)
- .fail $.ne.(bufstruct_size-4)
-
- .offset 0 âfâoâCâXâhâëâCâoôⁿÅoù═é╠âèâNâGâXâgâwâbâ_
- .ds.b 1
- .ds.b 1
- DEVIO_COMMAND: .ds.b 1
- DEVIO_ERR_LOW: .ds.b 1
- DEVIO_ERR_HIGH: .ds.b 1
- .ds.b 8
- DEVIO_DATABUF: .ds.b 1
- DEVIO_ENDADR:
- DEVIO_ADDRESS: .ds.l 1
- DEVIO_ARGUMENT:
- DEVIO_LENGTH: .ds.l 1
- .ds.l 1
- REQHEAD_SIZE:
- .fail REQHEAD_SIZE.ne.26
-
-
- * Text Section -------------------------------- *
-
- .cpu 68000
-
- .text
- .even
-
-
- * Device Driver Interface --------------------- *
-
- usereg: .reg d0-d1/a4-a5
-
- top_:
- .ifdef __XCONC
- .dc.l xconc_header
- .else
- .dc.l -1
- .endif
- .dc $8020
- .dc.l xcon_request
- .dc.l xcon_interrupt
- *01234567
- .dc.l 'XCON '
-
- .ifdef __XCONC
- xconc_header: .dc.l -1
- .dc $8000
- .dc.l xconc_request
- .dc.l xconc_interrupt
- *01234567
- .dc.l 'XCONC '
-
- xconc_request:
- move.l a5,(xconc_req_adr)
- rts
- xconc_interrupt:
- PUSH usereg
- movea.l (xconc_req_adr,pc),a5
- bra @f
- .endif
-
- xcon_request:
- move.l a5,(xcon_req_adr)
- rts
- xcon_interrupt:
- PUSH usereg
- movea.l (xcon_req_adr,pc),a5
- @@:
- moveq #0,d1
- move.b (DEVIO_COMMAND,a5),d1
- add d1,d1
- moveq #0,d0
- move (@f,pc,d1.w),d1
- jsr (@f,pc,d1.w)
-
- addq.l #DEVIO_ERR_LOW,a5
- move.b d0,(a5)+ * DEVIO_ERR_LOW
- move d0,-(sp)
- move.b (sp)+,(a5) * DEVIO_ERR_HIGH
-
- POP usereg
- rts
-
- @@: .dc xcon_init-@b 0üFÅëè·ë╗
- .dc xcon_commanderr-@b 1üFâGâëü[
- .dc xcon_commanderr-@b 2üFûóÄgùp
- .dc xcon_commanderr-@b 3üFIOCTRL é╔éµéΘôⁿù═
- .dc xcon_datinp-@b 4üFôⁿù═
- .dc xcon_datsns-@b 5üFɵô╟é▌ôⁿù═
- .dc xcon_inpchk-@b 6üFôⁿù═âXâeü[â^âXâ`âFâbâN
- .dc xcon_commanderr-@b 7üFôⁿù═âoâbâtâ@é≡âNâèâA
- .dc xcon_output-@b 8üFÅoù═
- .dc xcon_output-@b 9üFÅoù═(Verify)
- .dc xcon_ok-@b 10üFÅoù═âXâeü[â^âXâ`âFâbâN
- .dc xcon_commanderr-@b 11üFûóÄgùp
- .dc xcon_commanderr-@b 12üFIOCTRL é╔éµéΘÅoù═
-
- xcon_datsns:
- move.b d0,(DEVIO_DATABUF,a5) âfü[â^é¬ôⁿé┴é─é½é─é╚éó
- rts
-
- xcon_inpchk:
- moveq #1,d0 Åφé╔ôⁿù═òsë┬
- rts
-
- xcon_datinp:
- move.l (DEVIO_LENGTH,a5),d0
- beq xcon_ok
- movea.l (DEVIO_ADDRESS,a5),a4
- @@:
- clr.b (a4)+
- subq.l #1,d0
- bne @b
- xcon_ok:
- * moveq #0,d0
- rts
- xcon_commanderr:
- move #$5003,d0 ;âRâ}âôâhâRü[âhé¬òsÉ│
- rts
-
- * XCON é╓é╠Åoù═
- xcon_output:
- usereg: .reg d1-d2/a0-a3
- PUSH usereg
- moveq #0,d0 ;ESCâtâëâO/ò╘Æl
-
- move.l (DEVIO_LENGTH,a5),d2
- beq xcon_output_return
- subq.l #1,d2
-
- movea.l (DEVIO_ADDRESS,a5),a0
- lea (xcon_output_hb,pc),a1
- lea (ctype_table,pc),a2
-
- lea (condrv_put_char_force,pc),a3
- * cmpi #RTS,(a3)
- * sne -(sp)
- * bne @f
- * bsr toggle_buffering_mode
- *@@:
- move (a1),d1
- bne xcon_output_2
- xcon_output_loop:
- move.b (a0)+,d1
- tst.b (a2,d1.w)
- bmi xcon_output_1
-
- *** bsr print_d1
- jsr (a3) ;êΩò╢ÄÜÅæé½ì₧é▌
-
- dbra d2,xcon_output_loop
- bra xcon_output_next
-
- xcon_output_1:
- move.b d1,(a1)
-
- dbra d2,@f
- clr d2
- subq.l #1,d2
- bcs xcon_output_end ;2bytesò╢ÄÜé╠ôrÆåé┼ÅIéφé┴é╜
- @@:
- move (a1),d1
- xcon_output_2:
- move.b (a0)+,d1
- *** bsr print_d1
- jsr (a3) ;êΩò╢ÄÜÅæé½ì₧é▌
- moveq #0,d1
-
- dbra d2,xcon_output_loop
- xcon_output_next:
- clr d2
- subq.l #1,d2
- bcc xcon_output_loop
-
- move d0,(a1)
- xcon_output_end:
- * tst.b (sp)+
- * bne @f
- * bsr toggle_buffering_mode
- *@@:
- xcon_output_return:
- POP usereg
- rts
-
- .if 0
- print_d1:
- PUSH d0-d7/a0-a6
- lea (print_d1_buf+1,pc),a0
- moveq #4-1,d0
- print_d1_loop:
- rol #4,d1
- moveq #$f,d2
- and.b d1,d2
- addi.b #'0',d2
- cmpi.b #'9',d2
- bls @f
- addi.b #'a'-('9'+1),d2
- @@:
- move.b d2,(a0)+
- dbra d0,print_d1_loop
-
- lea (print_d1_buf,pc),a1
- movea.l (b_print_orig,pc),a0
- jsr (a0)
-
- POP d0-d7/a0-a6
- rts
- print_d1_buf:
- .dc.b '(0000)',0
- .even
-
- .endif
-
- * End of Device Driver Interface -------------- *
-
- dummy_rte:
- rte
-
- * New IOCS Call ------------------------------- *
-
- iocs_b_print:
- usereg .reg d1/a1
- PUSH usereg
- moveq #0,d1
- move.b (a1)+,d1
- beq @f ÅIéφéΦ
- 1: bsr condrv_put_char
- move.b (a1)+,d1 ăé╠êΩò╢ÄÜ
- bne 1b
- @@:
- POP usereg
- move.l (b_print_orig,pc),-(sp)
- rts
-
- iocs_txrascpy:
- usereg .reg d1-d2/d4/a3
- PUSH usereg
- lea (CRTC_R21),a3
- move (a3),d4
- move #$010f,d0
- and.b d3,d0
- move d0,(a3)
- move #$0101,d0
- tst d3
- bpl @f
- neg d0 $feff
- @@:
- exg d0,d2
- bsr txrascpy_sub
- move d4,(a3)
- POP usereg
- @@: rts
-
- WAIT_HSYNC .macro
- .local skip1,skip2
- skip1 tst.b (a0)
- bmi skip1
- skip2 tst.b (a0)
- bpl skip2
- .endm
-
- * in a3.l CRTC_R21($e8002a)
-
- txrascpy_sub:
- subq #1,d0 âëâXâ^âRâsü[
- bmi @b
- usereg .reg d4-d6/a0-a2
- PUSH usereg
-
- lea (MFP_GPIP-CRTC_R21,a3),a0
- lea (CRTC_R22-CRTC_R21,a3),a1
- lea (CRTC_MODE-CRTC_R21,a3),a2
-
- moveq #8,d4
- clr.b (MFP_DDR-CRTC_R21,a3)
- bset #0,(a3) âeâLâXâgô»Ä₧âAâNâZâX ON
- move sr,d5
- move d5,d6
- ori #$700,d6
- txrascpy_loop:
- move d6,sr èäéΦì₧é▌ï╓Ä~
- WAIT_HSYNC
-
- move d1,(a1) ô]æùâëâXâ^
- move d4,(a2) âëâXâ^âRâsü[èJÄn
- move d5,sr èäéΦì₧é▌ïûë┬
- add d2,d1 ăé╠âëâXâ^
- dbra d0,txrascpy_loop
-
- WAIT_HSYNC
- clr (a2) âëâXâ^âRâsü[ÆΓÄ~
- bclr #0,(a3) âeâLâXâgô»Ä₧âAâNâZâX OFF
- POP usereg
- rts
-
- *condrv_put_char_forceé╠ë║é╔ê┌ô«.
- *iocs_b_putc:
- * move.l (b_putc_orig,pc),-(sp)
- * bra condrv_put_char
-
- * End of New IOCS Call ----------------------- *
-
-
- * âoâbâtâ@Åæé½ì₧é▌âïü[â`âô ------------------- *
-
- usereg: .reg d0-d4/d7/a0-a6
-
- d0~column: .reg d0
- d1~char: .reg d1
- d2~byte: .reg d2
- d3~temp: .reg d3
- d4~temp2: .reg d4
- *d5~unused: .reg d5
- *d6~unused2: .reg d6
- d7~line0: .reg d7
-
- a0~column: .reg a0
- a1~top: .reg a1
- a2~old: .reg a2
- a3~now: .reg a3
- a4~write: .reg a4
- a5~end: .reg a5
- a6~buf: .reg a6
-
-
- * Åφé╔Åæé½ì₧é▌ë┬ö\é╚î─é╤Åoé╡âAâhâîâX.
- * ESCâVü[âPâôâXìφÅ£é═ûóæ╬ë₧.
- condrv_put_char_force:
- PUSH usereg
- bra putbuf_not_esc
-
- iocs_b_putc:
- move.l (b_putc_orig,pc),-(sp)
- bra condrv_put_char
-
- condrv_put_char:
- PUSH usereg
- * rts ;âoâbâtâ@ĵéΦì₧é▌ÆΓÄ~Æå
-
- move (stop_level,pc),d3~temp ;ÉVâoâbâtâ@ÆΓÄ~Åêù¥
- bne putbuf_cansel
-
- cmpi.b #ESC,d0
- bne putbuf_not_esc
- move.b (option_ne_flag,pc),d3~temp
- bne putbuf_cansel ;ESCâVü[âPâôâXÆå
- putbuf_not_esc:
- bsr check_backscroll_buffer
-
- lea (putbuf_column,pc),a0~column
- movem.l (buffer_top,a6~buf),a1~top/a2~old/a3~now/a4~write/a5~end
- move.b (a0~column),d0~column ;î╗ì▌ìsé╠ÄcéΦîàÉö
- move.b (a3~now),d2~byte ;î╗ì▌ìsé╠âoâCâgÉö
- move.l (line_buf,pc),d7~line0
-
- move d1~char,-(sp)
- move.b (sp)+,d3~temp ;Åπê╩byte
- beq putbuf_1byte
- cmpi.b #$f0,d3~temp
- bcc putbuf_2byte_hankaku
- cmpi.b #$80,d3~temp
- bne putbuf_2byte_zenkaku
-
- putbuf_2byte_hankaku:
- subq.b #1,d0~column
- bcc putbuf_2byte
-
- moveq #WIDTH-1,d0~column
- bra @f
-
- putbuf_2byte_zenkaku:
- subq.b #2,d0~column
- bcc putbuf_2byte
-
- moveq #WIDTH-2,d0~column
- @@: bsr make_newline_n
- putbuf_2byte:
- move.b d3~temp,(a4~write)+ ;Åπê╩byte
- bsr PointerForward
-
- move.b d1~char,(a4~write)+ ;ë║ê╩byte
- bsr PointerForward
-
- addq.b #2,d2~byte
- bra putbuf_end
-
- putbuf_1byte:
- cmpi #$20,d1~char
- bcs putbuf_ctrl0~1f ;$00ü`$1f
- cmpi #DEL,d1~char
- bne putbuf_hankaku ;$20-$7e
- ;putbuf_del:
- move.b (option_nc_flag,pc),d3~temp
- bne putbuf_cansel
- putbuf_bs:
- putbuf_esc:
- putbuf_ctrl:
- putbuf_hankaku:
- subq.b #1,d0~column
- bcc @f
-
- moveq #WIDTH-1,d0~column
- bsr make_newline_n
- @@:
- move.b d1~char,(a4~write)+
- bsr PointerForward
-
- addq.b #1,d2~byte
- putbuf_end:
- move.b d0~column,(a0~column) ;âoâbâtâ@Åæì₧îàÉö
- .ifdef __EOBCUR
- bne @f
- move.b #WIDTH,(a0~column)
- bsr make_newline_n
- @@:
- .endif
- move.b d2~byte,(a3~now) ;âoâbâtâ@Åæì₧âoâCâgÉö
- clr.b (a4~write)
- .ifdef __EOBCUR
- putbuf_end2:
- .endif
- movem.l a2~old/a3~now/a4~write,(buffer_old,a6~buf)
- putbuf_nul:
- putbuf_esc_ne:
- putbuf_ctrl_nc:
- putbuf_cansel:
- POP usereg
- move d1~char,(bufwrite_last)
- rts
-
- ;ëⁿìsÅêù¥
-
- make_newline:
- moveq #WIDTH,d0~column
- make_newline_n:
- move.b d2~byte,(a3~now)
- move.b d2~byte,(a4~write)+
- bsr PointerForward
-
- moveq #0,d2~byte
-
- movea.l a4~write,a3~now
- clr.b (a4~write)+
- bra PointerForward
-
- PointerForward:
- cmpa.l a5~end,a4~write
- bne @f
- movea.l a1~top,a4~write
- @@:
- cmpa.l a4~write,a2~old
- bne PointerForward_end
-
- addq.l #1,a2~old
- cmpa.l a5~end,a2~old
- bne @f
- movea.l a1~top,a2~old
- @@:
- cmpa.l d7~line0,a2~old
- bne @f
- st (line_buf-putbuf_column,a0~column)
- @@:
- cmpa.l (mark_line_adr,pc),a2~old
- bne @f
- clr.l (mark_char_adr-putbuf_column,a0~column)
- clr.l (mark_line_adr-putbuf_column,a0~column)
- @@:
- moveq #0,d4~temp2
- move.b (a2~old)+,d4~temp2
- adda d4~temp2,a2~old
- cmpa.l a5~end,a2~old
- bcs @f
- suba.l (buffer_size,pc),a2~old
- @@:
- clr.b (a2~old)
- PointerForward_end:
- rts
-
- ;ɺîΣïLìåé╠Åêù¥
-
- putbuf_lf:
- moveq #CR,d1~char
- putbuf_cr:
- cmp (bufwrite_last,pc),d1~char
- beq putbuf_cansel ;æOë±éα CR é╛é┴é╜éτû│Äï
-
- tst.b d0~column
- bne @f
-
- bsr make_newline_n ;d0Åëè·ë╗é═òsùv
- @@:
- move.b d1~char,(a4~write)+
- bsr PointerForward
-
- addq.b #1,d2~byte
-
- bsr make_newline
- bra putbuf_end
-
- putbuf_tab:
- tst.b d0~column
- bne @f
-
- bsr make_newline
- @@:
- move.b d1~char,(a4~write)+
- bsr PointerForward
-
- subq.b #1,d0~column
- putbuf_tab_end:
- andi.b #.not.7,d0~column
- addq.b #1,d2~byte
- bra putbuf_end
-
- putbuf_tab_nt:
- tst.b d0~column ;TAB Åêù¥(-nt)
- bne @f
-
- bsr make_newline
- @@:
- subq.b #1,d0~column
- moveq #%111,d3~temp
- and.b d0~column,d3~temp
- add.b d3~temp,d2~byte
-
- moveq #SPACE,d1~char
- putbuf_tab_loop:
- move.b d1~char,(a4~write)+ ;TABé≡SPACEé╔ò╧è╖
- bsr PointerForward
- dbra d3~temp,putbuf_tab_loop
- bra putbuf_tab_end
-
- putbuf_bs_nb:
- subq.b #1,d2~byte ;BS Åêù¥(-nb)
- bcs putbuf_cansel ;âJü[â\âïé¬ìsé╠ì╢Æ[é╔éáéΘ
-
- addq.b #1,d0~column ;1 âoâCâgìφÅ£
- subq.l #1,a4~write
- TopChk a4~write
-
- .if 1 ;1 âoâCâgö╝èpò╢ÄÜé≡ BS êΩî┬é┼ìφÅ£é╖éΘ
-
- * Æ╝æOé╠ 1 âoâCâgé¬ $80üA$f0-$ff é╚éτüAìíìφÅ£é╡é╜
- * 1 âoâCâgé╞ìçéφé╣é─ 2 âoâCâgö╝èpò╢ÄÜé╠ë┬ö\ɽé¬éáéΘ.
-
- move.b d2~byte,-(sp)
- subq.b #1,d2~byte
- bcs putbuf_bs_end ;âJü[â\âïé¬ìsé╠ì╢Æ[é╔éáéΘ
-
- move.l a4~write,-(sp)
- subq.l #1,a4~write
- TopChk a4~write
- cmpi.b #$80,(a4~write)
- beq putbuf_bs_check ;2 âoâCâgö╝èp
- cmpi.b #$f0,(a4~write)
- bcc putbuf_bs_check ;üV
- movea.l (sp)+,a4~write
- putbuf_bs_end:
- move.b (sp)+,d2~byte ;ìXé╚éΘìφÅ£é═òsùvé╛é┴é╜
- bra putbuf_end
- putbuf_bs_check:
-
- * .. ìφÅ£é╡é╜ 1 âoâCâg
- * XX é╗é╠Æ╝æO($80üA$f0-$ff)
- * aaü` ìXé╔æOò√
- * aa bb cc dd XX ..
-
- * âfü[â^ù±é¬é╞é╠éµéñé╔ò╢ÄÜé≡ì\ɼé╖éΘé⌐é≡ìléªéΘ.
- * aa bb [cc dd] [XX ..]
- * é╞éóéñéµéñé╔ [cc dd]üA[XX ..] é¬ægé╞é╡é─ 2 âoâCâgò╢ÄÜé≡
- * ì\ɼé╡é─éóéΘé╚éτüAìXé╔éαéñ 1 âoâCâgüAXX é≡ìφÅ£é╖éΘ.
- * aa [bb cc] [dd XX] ..
- * é╞éóéñéµéñé╔ [bb cc] [dd XX] é¬ægé╔é╚é┴é─éóéΘé╚éτìφÅ£é═
- * é╡é╚éó.
-
- * 1)[dd XX] é¬É¼ùºé╖éΘé⌐é≡Æ▓é╫éΘ.
- * ɼùºé╡é╚é»éΩé╬ [XX ..] é¬èmÆΦé╖éΘ.
- * 2)[dd XX] é¬É¼ùºé╖éΩé╬ [XX ..] é═ɼéΦùºé╜é╚éóé¬üAî╗ì▌é╠
- * Åεò±é┼é═ÄΦæOé╠ [cc dd] é¬É¼ùºé╖éΘë┬ö\ɽé≡ö█ÆΦé┼é½é╚éó.
- * éαé╡é╗éΩé¬É¼ùºé╖éΘé╚éτüA[cc dd] [XX ..] é¬èmÆΦé╡üAû{ôû
- * é═é╟é┐éτé╚é╠é⌐ò¬é⌐éτé╚é¡é╚éΘ.
- * 3)éµé┴é─üA[cc dd] é¬É¼ùºé╖éΘé⌐é≡Æ▓é╫éΘ.
- * ɼùºé╡é╚é»éΩé╬ [dd XX] é¬èmÆΦé╖éΘ.
- * 4)[cc dd] é¬èmÆΦé╖éΩé╬ [XX ..] éαèmÆΦé╖éΘé¬üA[bb cc] é╔
- * é┬éóé─éαô»ùlé╠ï^ûΓé¬É╢é╢éΘ.
- * 5)[bb cc]üA[aa bb] é╚é╟ɼùºé╖éΘî└éΦæOò√é╠âfü[â^é≡Æ▓é╫éΘ.
- * 6)ì┼îπé╔ɼùºé╡é╜ê╩Æué⌐éτ 2 âoâCâgé╕é┬ægé≡ì∞é┴é─éóé»é╬
- * [dd XX] é╚é╠é⌐ [XX ..] é╚é╠é⌐é¬ò¬é⌐éΘ. é▒éΩé═üAXX éµéΦ
- * ÄΦæOé┼ɼùºé╡é╜âoâCâgÉöé¬è∩Éöé⌐ï⌠Éöé⌐é┼ö╗Æfé┼é½éΘ.
-
- putbuf_bs_loop:
- subq.b #1,d2~byte
- bcs putbuf_bs_loop_end ;éαéñò╢ÄÜé¬Äcé┴é─éóé╚éó
- subq.l #1,a4~write
- TopChk a4~write
- move.b (a4~write),d3~temp ;$80-$9f -> 4
- lsr.b #5,d3~temp ;$e0-$ff -> 7
- btst d3~temp,#(1<<4)+(1<<7)
- bne putbuf_bs_loop ;ìXé╔æOò√é≡Æ▓é╫éΘ
- putbuf_bs_loop_end:
- movea.l (sp)+,a4~write
- .if 0
- * âïü[âvèJÄnÄ₧é╠ d2~byte é═ (sp).b é╠ÆléµéΦ 1 żé│éó.
- * âïü[âvÅ≡îÅòsɼùºÄ₧é╔éα d2~byte é⌐éτ 1 é≡ê°éóé─éóéΘ.
- addq.b #2,d2~byte ;ÅπïLô±ô_é╠ò¬é≡òΓÉ│
- sub.b (sp),d2~byte
- neg.b d2~byte ;ɼùºé╡é╜âoâCâgÉö(XX é═è▄é▄é╚éó)
- .else
- sub.b (sp),d2~byte ;ìéæ¼ë╗
- .endif
- lsr.b #1,d2~byte
- bcs putbuf_bs_end ;è∩Éöé╚éτ [dd XX] é╚é╠é┼ìφÅ£é═òsùv
-
- * ï⌠Éö(0 é╠ÅΩìçéαè▄é▐)é╚éτ [cc dd] [XX ..] é╚é╠é┼üA
- * éαéñ 1 âoâCâgìφÅ£é╖éΘ.
-
- move.b (sp)+,d2~byte
- subq.b #1,d2~byte
- addq.b #1,d0~column ;1 âoâCâgìφÅ£
- subq.l #1,a4~write
- TopChk a4~write
- .endif
-
- .if 0
-
- * âoâbâNâXâNâìü[âïë{ùùèJÄnÄ₧é╔îàê╩Æué≡îƒì╕üEòΓÉ│é╖éΘéµéñé╔é╡é╜é╠é┼
- * é▒é▒é┼é╠Åêù¥é═òsùvé╔é╚é┴é╜(97/09/19).
- * è∙é╔Ägùpé┼é½é╚éóâRü[âhé╚é╠é┼ùLî°é╔é╡é╚éóé▒é╞(98/05/27).
-
- usereg2: .reg d0-d1/a1-a2/a5
- PUSH usereg2
- lea (line_buf,pc),a2
- tst.b (a2)
- bmi @f
-
- lea (cursorY,pc),a5
- move (a5),d1
- lsl #2,d1
- movea.l (a2,d1.w),a1
- cmpa.l a1,a3~now a3=Åæé½ì₧é▌ê╩Æu
- bne @f
- move -(a5),d1 cursorXbyte
- move -(a5),d0 cursorX
- adda d1,a1
- addq.l #1,a1
- EndChk a1
- cmpa.l a1,a4
- bne @f
- subq #1,d0
- bmi @f
- subq #1,d1
- bmi @f
- move d0,(a5)+
- move d1,(a5)+
- @@:
- POP usereg2
- .endif
-
- bra putbuf_end
-
- ***
- putbuf_ctrl0~1f:
- move d1~char,d3~temp
- add d1~char,d3~temp
- move (putbuf_ctrl_table,pc,d3~temp.w),d3~temp
- jmp (putbuf_ctrl_table,pc,d3~temp.w)
-
-
- ;ɺîΣïLìåé╠Åêù¥ò¬è≥ò\
-
- DCR: .macro num,addr
- .rept num
- .dc addr-putbuf_ctrl_table
- .endm
- .endm
-
- putbuf_ctrl_table:
- DCR 1,putbuf_nul ;$00
- DCR 7,putbuf_ctrl ;$01ü`$07
- DCR 1,putbuf_bs ;$08
- DCR 1,putbuf_tab ;$09
- DCR 1,putbuf_lf ;$0a
- DCR 2,putbuf_ctrl ;$0bü`$0c
- DCR 1,putbuf_cr ;$0d
- DCR 13,putbuf_ctrl ;$0eü`$1a
- DCR 1,putbuf_esc ;$1b
- DCR 4,putbuf_ctrl ;$1cü`$1f
-
- ;-ncé┼putbuf_ctrl_ncé╔Åæé½è╖éªéΘâRü[âh=1
- PUT_CTRL_LIST: .equ %1111_0_1111111111111_0_11_000_1111111_0
- ;fedc_b_a9876543210fe_d_cb_a98_7654321_0
-
-
- * New DOS Call -------------------------------- *
-
- dos_fnckey:
- pea (display_system_status,pc)
- move.l (fnckey_orig,pc),-(sp)
- rts
-
- dos_hendsp:
- cmpi #3,(a6)
- beq dos_hendsp_close âéü[âhò\ĪâEâBâôâhâEé≡âNâìü[âY
- tst (a6)
- bne call_original_dos_hendsp
- bset #FEPOPEN_bit,(bitflag) âéü[âhò\ĪâEâBâôâhâEé≡âIü[âvâô
- call_original_dos_hendsp:
- move.l (hendsp_orig,pc),-(sp)
- rts
-
- dos_hendsp_close:
- bsr call_original_dos_hendsp
- bclr #FEPOPEN_bit,(bitflag) ò┬é╢é╜
- bra display_system_status
-
- dos_conctrl:
- cmpi #$e,(a6)
- bne call_original_dos_conctrl
-
- move (2,a6),d0
- bmi dos_conctrl_getfncmode
- bsr set_funcdisp_flag
- bsr call_original_dos_conctrl
- display_system_status:
- move.b (bitflag,pc),-(sp)
- * andi.b #IS_FEPOPEN.or.IS_NO_FUNC.or.IS_GETSS,(sp)+
- andi.b #IS_FEPOPEN.or.IS_NO_FUNC,(sp)+
- bne display_sys_stat_end
- btst #OPT_F_bit,(option_flag,pc)
- bne display_sys_stat_end
-
- usereg .reg d0-d4/a1
- PUSH usereg
- move.b (option_f_col,pc),d1 ò\Īæ«É½
- moveq #0,d2 ì╢Æ[
- moveq #31,d3 ì┼ë║ìs
-
- cmpi.b #18,($93c) CRTMOD
- bne @f
- moveq #848/16-1,d3
- @@:
- moveq #2-1,d4 2ò╢ÄÜ
- lea (sys_stat_prtbuf,pc),a1
- cmpi #RTS,(condrv_put_char-sys_stat_prtbuf,a1)
- sne (a1)
- addi.b #'!',(a1)
- .fail ('!'-1).ne.SPACE
- IOCS _B_PUTMES
- POP usereg
- display_sys_stat_end:
- rts
-
- dos_conctrl_getfncmode:
- bsr call_original_dos_conctrl
- bsr set_funcdisp_flag
- bra display_system_status
-
- set_funcdisp_flag
- usereg .reg d0-d1/a0
- PUSH usereg
- lea (bitflag,pc),a0
- moveq #NO_FUNC_bit,d1
-
- bset d1,(a0)
- cmpi #2,d0
- bcc @f 2ê╚ë║é╚éτò\Īé╡é─éαù╟éó
- bchg d1,(a0)
- @@:
- POP usereg
- rts
-
- call_original_dos_conctrl:
- move.l (conctrl_orig,pc),-(sp)
- rts
-
- * Condrv Official Work ------------------------ *
-
- .even
- stop_level: .dc 0
- option_flag:
- .dc.b 0
- OPT_J_bit: .equ 7 : -j(âRü[âhôⁿù═Ä₧é╔16ÉiÉöò╢ÄÜé╠é▌âyü[âXâgé╖éΘ)
- OPT_BG_bit: .equ 1 : BGæ╬ë₧(sleepé╖éΘ - é▒éΩé═-zé╠öñé╛é┴é╜)
- OPT_F_bit: .equ 0 : -f(!é≡ò\Īé╡é╚éó)
- .even
- .dc 0,0 âyü[âXâgé╠âEâFâCâgâJâEâôâ^/Åëè·Æl(ûóÄgùp)
- .dc.l condrv_system_call
- nul_string:
- .dc.b 0 ;ï≤ò╢ÄÜù±(Åφé╔ NUL)
- keyctrl_flag:
- .dc.b 0 -1:âLü[æÇì∞ù}ɺ
- .dc.l condrv_put_char
- pastbuf_size:
- .dc.l KBbuf_Default
- pastbuf_adr:
- .dc.l keypast_buffer
- .dc.l 'hmk*'
-
- * IOCS _KEY_INIT ------------------------------ *
-
- iocs_key_init:
- move.l (key_init_orig,pc),-(sp)
- bra initialize_keypast_buffer
-
- * âLü[âoâbâtâ@Åëè·ë╗ -------------------------- *
-
- initialize_keypast_buffer:
- .if 0
- movea.l (pastbuf_adr,pc),a0
- @@: tst.b (a0)+
- bne @b
- subq.l #1,a0
- move.l a0,(past_pointer)
- .endif
- lea (nul_string,pc),a0 ;NUL é═âÅü[âNôαé╠âAâhâîâXé≡É▌ÆΦ
- move.l a0,(past_pointer-nul_string,a0)
- adda.l (pastbuf_size,pc),a0 ;âoâbâtâ@ûûö÷é╔ö╘ò║é≡Æué¡
- clr.b (keypast_buffer-nul_string-1,a0)
- rts
-
-
- * âoâbâNâìâOâoâbâtâ@Åëè·ë╗ -------------------- *
-
- check_backscroll_buffer:
- movea.l (backscroll_buf_adr,pc),a6
- cmpi.l #'hmk*',(a6)+
- beq check_backscroll_buffer_end
-
- initialize_backscroll_buffer:
- usereg: .reg d0/a5-a6
- PUSH usereg
- moveq #0,d0
- movea.l (backscroll_buf_adr,pc),a6
- lea (bufstruct_size,a6),a5
-
- move.l #'hmk*',(a6)+
- move.l a5,(a6)+ BufTop
- .rept 3
- move.l a5,(a6)+ ɵô¬ìs/î╗ì▌ìs/Åæé½ì₧é▌â|âCâôâ^
- move.b d0,(a5)+
- .endm
- subq.l #3,a5
- adda.l (buffer_size,pc),a5
- move.l a5,(a6)+ BufEnd
- move.l d0,(a6)+ ûóÄgùp
- move.l d0,(a6) üV
-
- lea (line_buf,pc),a5
- st (a5)
- move d0,(bufwrite_last-line_buf,a5)
- move.b #WIDTH,(putbuf_column-line_buf,a5)
-
- POP usereg
- check_backscroll_buffer_end:
- rts
-
-
- * IOCS _B_KEYINP ------------------------------ *
-
- iocs_b_keyinp:
- bsr iocs_b_keysns
- tst.l d0
- beq iocs_b_keyinp
- call_orig_b_keyinp:
- move.l (b_keyinp_orig,pc),-(sp)
- rts
-
- * IOCS _B_KEYSNS ------------------------------ *
-
- __FAST_PAST: .equ 0 * 1:êΩë±é┼64bytesô]æùé╖éΘ
-
- iocs_b_keysns:
- movea.l (past_pointer,pc),a0
- moveq #0,d0
- move.b (a0)+,d0
- beq not_past_mode
-
- KEYbtst KEY_ESC
- bne past_stop * ESC é¬ëƒé│éΩé─éóé╜éτâyü[âXâgé≡ÆåÄ~é╖éΘ
-
- tst (KBUFNUM)
- bne not_past_mode * âLü[é¬ôⁿù═é│éΩé─éóéΘ
-
- usereg: .reg d1-d2/a1-a3
- PUSH usereg
- move sr,-(sp)
-
- lea (ctype_table,pc),a3
- moveq #0,d1 êΩë₧âNâèâA
- moveq #0,d2 -1:2âoâCâgò╢ÄÜÅêù¥Æå
-
- ori #$700,sr
- past_one_more_char:
- lea (KBUFNUM),a2
- movea.l (2,a2),a1
- addq.l #2,a1
- cmpa #$89c,a1
- bcs @f
- lea ($81c),a1
- @@:
- bclr #AFTERCR_bit,(bitflag)
- beq past_without_header òüÆ╩é╔Åoù═
-
- move.b (option_flag,pc),d1 -j
- bpl @f âRü[âhôⁿù═âéü[âhé┼é╚é»éΩé╬âwâbâ_éáéΦ
-
- LEDbtst LED_âRü[âh
- bne past_without_header âRü[âhôⁿù═âéü[âhé┼é═Åφé╔âwâbâ_é≡Åoù═é╡é╚éó
- @@:
- move.b (past_header,pc),d1
- beq past_without_header
-
- move d1,(a1)
- addq #1,(a2)+
- move.l a1,(a2)
-
- .if __FAST_PAST
- subq.l #1,a0
- .endif
- bra past_char_next
-
- past_without_header:
- move.l a0,(past_pointer)
- move.b (option_flag,pc),d1 -j
- bpl @f
- LEDbtst LED_âRü[âh
- beq @f
-
- btst.b #IS_HEX_bit,(a3,d0.w) 0-9A-Fa-fé⌐üH
- beq past_char_next
- @@:
- move d0,(a1)
- addq #1,(a2)+
- move.l a1,(a2)
-
- tst.b (a3,d0.w)
- bpl @f 1âoâCâgò╢ÄÜé⌐üH
- tst d2
- bne past_char_next
-
- moveq #-1,d2
- move.b (a0)+,d0 éQâoâCâgû┌é≡Åêù¥
- bne past_one_more_char
- bra past_char_end
- @@:
- cmpi.b #CR,d0
- bne past_char_next
- bset #AFTERCR_bit,(bitflag)
- past_char_next:
- .if __FAST_PAST
-
- cmpi #64-1,-(a2) * êΩïCé╔ô]æùé╖éΘé╞ĵéΦé▒é┌é╖üH
- bhi @f * âoâbâtâ@é¬û₧öt
-
- move.b (a0)+,d0 ăé╠ò╢ÄÜ
- bne past_one_more_char
- @@:
- .endif
- past_char_end:
- move (sp)+,sr
- POP usereg * âyü[âXâgé╡é╜éτâLü[â`âFâbâNé═òsùv
- call_orig_b_keysns:
- move.l (b_keysns_orig,pc),-(sp)
- rts
-
- not_past_mode:
- usereg: .reg d1-d7/a0-a6
- PUSH usereg
- * sleepæ╬ë₧ {
- move.b (sleep_flag,pc),d0
- bne wakeup_backscroll
- * }
- bsr call_orig_b_keysns
-
- btst #BACKSCR_bit,(bitflag,pc)
- bne iocs_keysns_return
-
- move d0,-(sp)
- move.b (sp)+,d1
- beq iocs_keysns_return
- move.b (keyctrl_flag,pc),d2
- bne iocs_keysns_return
-
- lea (SFTSTAT),a0
- btst #SFT_CTRL,(a0)
- beq @f
-
- KEYCHK: .macro keycode,address
- cmpi.b #keycode,d1
- beq address
- .endm
-
- KEYCHK KEY_4 ,direct_key_past
- KEYCHK KEY_HELP,direct_key_past
- KEYCHK KEY_BS ,direct_key_toggle
- KEYCHK KEY_CLR ,direct_key_clear
-
- KEYCHK KEY_1,direct_key_backscroll_1
- KEYCHK KEY_2,direct_key_backscroll_2
- @@:
- move.b (option_o_flag,pc),d2
- btst d2,(a0)
- beq iocs_keysns_return
-
- KEYCHK KEY_ü¬ ,direct_key_backscroll_2
- KEYCHK KEY_ü½ ,direct_key_backscroll_1
- KEYCHK KEY_UNDO,direct_key_backscroll_1
- @@:
- btst #SUSPEND_bit,(bitflag,pc)
- beq iocs_keysns_return
-
- * âoâbâNâìâOé≡èJéóé╜é▄é▄ÅIù╣é╡é╜ÅΩìçé╔ùLî°é╚âLü[
- KEYCHK KEY_ü⌐ ,direct_key_left
- KEYCHK KEY_ü¿ ,direct_key_right
- KEYCHK KEY_R_DOWN,direct_key_rolldown
- KEYCHK KEY_R_UP ,direct_key_rollup
- iocs_keysns_return:
- POP usereg
- rts
-
- iocs_keysns_flush:
- bsr call_orig_b_keyinp
- iocs_keysns_return_0:
- moveq #0,d0
- bra iocs_keysns_return
-
- * ccrZ=1é┼âeâLâXâgÄgùpÆå
- is_text_used:
- cmpi.b #2,(TXUSEMD) ;âeâLâXâgëµû╩é╠Ägùpâéü[âh
- bne @f
- btst #2,(option_m_flag,pc)
- @@: rts
-
- * âyü[âXâgé≡ÆåÄ~é╖éΘ
- past_stop:
- bsr initialize_keypast_buffer
- @@:
- KEYbtst KEY_ESC
- bne @b ;ESCé¬ùúé│éΩéΘé▄é┼æ╥é┬
- keybuf_clear:
- moveq #0,d0
- lea (KBUFNUM),a0
- move d0,(a0)+
- move.l (a0)+,(a0)
- rts ;0é≡ò╘é╖
-
- * ^4 , ^HELP : âJâbâgé╡é╜ù╠êµé≡âyü[âXâg
- direct_key_past:
- bsr yank_sub
- bsr wait_release_ctrl_key
- bra iocs_keysns_flush
-
- * ^BS : âoâbâtâ@ĵéΦì₧é▌ÆåÆf/ì─èJ
- direct_key_toggle:
- bsr key_toggle_buffering_mode
- bra iocs_keysns_flush
-
- * ~ROLL DOWN : âEâBâôâhâEê╩Æué≡Åπé░éΘ
- direct_key_rolldown:
- bsr is_text_used
- beq @f
-
- bsr key_slide_window_up
- @@:
- bra iocs_keysns_flush
-
- * ~ROLL UP : âEâBâôâhâEê╩Æué≡ë║é░éΘ
- direct_key_rollup:
- bsr is_text_used
- beq @f
-
- bsr key_slide_window_down
- @@:
- bra iocs_keysns_flush
-
- * ~ü⌐ : âXâNâìü[âïâAâbâv
- direct_key_left:
- bsr is_text_used
- beq @f
-
- bsr direct_key_rl_sub
- bsr key_move_window_up
- @@:
- bra iocs_keysns_flush
-
- * ~ü¿ : âXâNâìü[âïâ_âEâô
- direct_key_right:
- bsr is_text_used
- beq @f
-
- bsr direct_key_rl_sub
- move (window_line,pc),d0
- bsr draw_line_d0
- bsr key_move_window_down
- @@:
- bra iocs_keysns_flush
-
- direct_key_rl_sub:
- bsr check_backscroll_buffer
- move (line_buf,pc),d0
- bmi key_beginning_of_buffer
- rts
-
- * ^CLR : âoâbâtâ@Å┴ïÄ
- direct_key_clear:
- bsr initialize_backscroll_buffer
- bra iocs_keysns_flush
-
- * ò╢ÄÜò\Īâïü[â`âô ---------------------------- *
-
- * ÄwÆΦìs(d0.w)é≡ò`ëµ
- draw_line_d0:
- usereg .reg d1/a1-a2 d0 éαöjë≤é╡é╚éóé▒é╞
- PUSH usereg
- lea (line_buf,pc),a3
- moveq #0,d1
- move d0,d1
- lsl #2,d1
- movea.l (a3,d1.w),a1
- move d0,d1
- swap d1
- lsr.l #5,d1
- movea.l (text_address,pc),a2
- adda.l d1,a2 ÄwÆΦìsé╠âAâhâîâX
- bsr draw_line
- POP usereg
- rts
-
- draw_line:
- usereg .reg d0-d5/a0-a2/a4-a5
- PUSH usereg
- move.l a1,d0
- bpl @f
- lea (nul_string,pc),a1
- @@:
- .ifdef __EMACS
- moveq #0,d5
- .else
- lea (line_buf,pc),a5 ;â}ü[âNï½èEé╠ÄZÅo
- move (cursorY,pc),d1
- lsl #2,d1
- movea.l (a5,d1.w),a4
- adda (cursorXbyte,pc),a4
- addq.l #1,a4
- EndChk2 a4
- movea.l (mark_char_adr,pc),a5
- cmpa.l a4,a5
- bcc @f
- exg a4,a5
- @@:
- .endif
- moveq #0,d3
- move.b (a1)+,d3
- EndChk a1
- moveq #0,d4
- bra draw_line_
-
- draw_line_loop:
- .ifndef __EMACS
- move.l (mark_char_adr,pc),d5
- beq draw_line_nomark
- moveq #0,d5
- cmpa.l (buffer_old,a6),a4
- bcc @f
- cmpa.l (buffer_old,a6),a5
- bcs @f
- cmpa.l a4,a1
- bcs draw_line_mark
- cmpa.l a5,a1
- bcs draw_line_nomark
- bra draw_line_mark
- @@:
- cmpa.l a4,a1
- bcs draw_line_nomark
- cmpa.l a5,a1
- bcc draw_line_nomark
- draw_line_mark:
- moveq #-1,d5
- draw_line_nomark:
- .endif
- move.b (a1)+,d1
- EndChk a1
- tst.b d1
- bpl @f $00-$7f
- cmpi #$a0,d1
- bcs draw_line_2byte $80-$9f
- cmpi #$e0,d1
- bcs @f $a0-$df
- draw_line_2byte:
- lsl #8,d1
- move.b (a1)+,d1
- EndChk a1
- subq #1,d3
- bcs draw_line_abort
- @@:
- bsr draw_char_d1
- draw_line_:
- moveq #0,d1
- dbra d3,draw_line_loop
- draw_line_abort:
- .ifndef __EMACS
- moveq #0,d5
- .endif
- bra @f
- draw_space_loop:
- bsr draw_space
- @@:
- cmpi.b #WIDTH,d4
- bcs draw_space_loop
- POP usereg
- rts
-
- draw_space:
- addq #1,d4
- move.b d5,(a2)+
- _offset .set $80
- .rept 16-1
- move.b d5,(_offset-1,a2)
- _offset .set _offset+$80
- .endm
- rts
-
- draw_char_d1:
- cmpi #$20,d1
- bhi draw_char_fntadr òüÆ╩é╠ò╢ÄÜ
- beq draw_space
-
- cmpi #CR,d1
- bne is_tab
-
- lea (cr_font,pc),a0
- tst.b (option_r_flag-cr_font,a0)
- bne draw_char_condrv_font -r ÄwÆΦÄ₧é═ëⁿìsïLìåé≡ò\Ī
- rts
- is_tab:
- cmpi #TAB,d1
- bne draw_char_fntadr é╗é╠æ╝é╠ɺîΣâRü[âh
-
- lea (tab_font_1,pc),a0
- tst.b (option_t_flag-tab_font_1,a0)
- beq draw_invisible_tab
- @@:
- bsr draw_char_condrv_font -t ÄwÆΦÄ₧é═TABïLìåé≡ò\Ī
- lea (tab_font_2,pc),a0
- moveq #%111,d1 8é╠ö{ÉöâJâëâÇé▄é┼ò`ëµ
- and d4,d1
- bne @b
- rts
- draw_invisible_tab:
- bsr draw_space
- moveq #%111,d1
- and d4,d1
- bne draw_invisible_tab
- rts
-
- draw_char_fntadr:
- moveq #8,d2
- movea.l (_FNTADR*4+$400),a0
- jsr (a0)
- movea.l d0,a0
- tst d1
- bne draw_widechar æSèpò╢ÄÜ
- draw_char_condrv_font:
- .ifndef __EMACS
- tst.b d5 ö╜ô]é⌐üH
- bne draw_char_reverse
- .endif
-
- addq #1,d4 ö╝èp
- move.b (a0)+,(a2)+
- _offset .set $80
- .rept 16-1
- move.b (a0)+,(_offset-1,a2)
- _offset .set _offset+$80
- .endm
- rts
-
- draw_widechar:
- .ifndef __EMACS
- tst.b d5
- bne draw_widechar_reverse
- .endif
-
- addq #2,d4 æSèp
- move.b (a0)+,(a2)+
- move.b (a0)+,(a2)+
- _offset .set $80
- .rept 16-1
- move.b (a0)+,(_offset-2,a2)
- move.b (a0)+,(_offset-1,a2)
- _offset .set _offset+$80
- .endm
- rts
-
- .ifndef __EMACS
- draw_char_reverse:
- addq #1,d4 ö╝èpö╜ô]
- move.b (a0)+,d0
- not.b d0
- move.b d0,(a2)+
- _offset .set $80
- .rept 16-1
- move.b (a0)+,d0
- not.b d0
- move.b d0,(_offset-1,a2)
- _offset .set _offset+$80
- .endm
- rts
-
- draw_widechar_reverse:
- addq #2,d4 æSèpö╜ô]
- .rept 2
- move.b (a0)+,d0
- not.b d0
- move.b d0,(a2)+
- .endm
- _offset .set $80
- .rept 16-1
- move.b (a0)+,d0
- not.b d0
- move.b d0,(_offset-2,a2)
- move.b (a0)+,d0
- not.b d0
- move.b d0,(_offset-1,a2)
- _offset .set _offset+$80
- .endm
- rts
- .endif
-
-
- .ifndef __EMACS
- draw_char_c:
- usereg .reg d0-d7/a0-a5
- PUSH usereg
-
- lea (line_buf,pc),a3
- moveq #0,d5
- move d7,d2 cursorY
- lsl #2,d2
- movea.l (a3,d2.w),a1
- adda d6,a1
- addq.l #1,a1
- EndChk a1
- moveq #0,d2
- move d7,d2
- swap d2
- lsr.l #5,d2
- movea.l (text_address,pc),a2
- adda.l d2,a2
- swap d6
- adda d6,a2
- move d6,d4
-
- move (cursorY,pc),d1
- lsl #2,d1
- movea.l (a3,d1.w),a4
- adda (cursorXbyte,pc),a4
- addq.l #1,a4
- EndChk2 a4
- movea.l (mark_char_adr,pc),a5
- cmpa.l a4,a5
- bcc @f
- exg a4,a5
- @@:
- move.l (mark_char_adr,pc),d1
- beq draw_char_c_nomark
- cmpa.l (buffer_old,a6),a4
- bcc @f
- cmpa.l (buffer_old,a6),a5
- bcs @f
- cmpa.l a4,a1
- bcs draw_char_c_mark
- cmpa.l a5,a1
- bcs draw_char_c_nomark
- bra draw_char_c_mark
- @@:
- cmpa.l a4,a1
- bcs draw_char_c_nomark
- cmpa.l a5,a1
- bcc draw_char_c_nomark
- draw_char_c_mark:
- moveq #-1,d5 ö╜ô]
- draw_char_c_nomark:
- moveq #0,d1
- move.b (a1)+,d1
- bpl @f
- cmpi #$a0,d1
- bcs draw_char_c_2byte
- cmpi #$e0,d1
- bcs @f
- draw_char_c_2byte:
- EndChk a1 ;é▒é▒é┼Æ▓é╫éΩé╬ö╝èpé╠Ä₧æ¼éó
- lsl #8,d1
- move.b (a1),d1
- @@:
- bsr draw_char_d1
- POP usereg
- rts
- .endif
-
-
- * âJü[â\âïò`ëµ -------------------------------- *
-
- blink_cursor:
- IOCS _ONTIME
- move.l d0,d2
- lea (last_time,pc),a0
- move.l (a0),d1
- cmp.l d1,d2
- bcc @f
-
- addi.l #99*60*60*24,d2 24Ä₧è╘îoë▀é╡é─ 0 é╔û▀é┴é╜Ä₧é╠òΓÉ│
- @@:
- sub.l d1,d2 îoë▀Ä₧è╘
- moveq #0,d1
- move.b (cursor_blink_count,pc),d1
- cmp.l d1,d2
- bcs blink_cursor_end é▄é╛Ä₧è╘é¬é╜é┴é─éóé╚éó
-
- move.l d0,(a0) âJü[â\âïô_û┼Ä₧ìÅé≡ìXÉV
- move.b #BLINKCYCLE,(cursor_blink_count-last_time,a0)
- bra blink_cursor_sub
-
- clear_cursor:
- move.l a0,-(sp)
- lea (cursor_blink_count,pc),a0
- clr.b (a0)+
- tst.b (a0) cursor_blink_state
- movea.l (sp)+,a0
- beq blink_cursor_end
-
- blink_cursor_sub:
- usereg .reg d0/a1-a2
- PUSH usereg
- lea (cursor_blink_state,pc),a2
- not.b (a2)
- movea.l (text_address,pc),a2
- adda (cursorX,pc),a2
- moveq #0,d0
- move (cursorY,pc),d0
- swap d0
- lsr.l #5,d0
- adda.l d0,a2
- @@:
- lea (CRTC_R21),a1
- move (a1),d0
- bclr #0,(a1)
- _offset .set 0
- .rept 16
- not.b (_offset,a2)
- _offset .set _offset+$80
- .endm
- move d0,(a1)
- POP usereg
- blink_cursor_end:
- rts
-
- blink_cursor_direct:
- PUSH usereg
- movea.l (mes_end_adr,pc),a2
- bra @b
-
-
- * IOCS _B_KEYSNS é⌐éτé╠âLü[ôⁿù═ --------------- *
-
- * ^2 , ~ü¬ : âoâbâtâ@é╠ì┼îπé⌐éτâoâbâNâìâOé╔ôⁿéΘ
- direct_key_backscroll_2:
- bsr is_text_used
- beq iocs_keysns_flush
-
- bsr check_backscroll_buffer
- bsr end_of_buffer_sub
-
- lea (cursorY,pc),a0
- move d2,(a0)
- bpl @f
- clr (a0)
- @@: st (cursorX-cursorY,a0) ;ì┼ÅIìsëEÆ[é╔ê┌ô«
- into_backscroll_at_lastpos:
- bsr check_column
- * sleepæ╬ë₧ {
- bsr tst_and_clr_sleep_flag
- beq into_backscroll_open_draw
-
- lea (last_line_ptr,pc),a2
- movea.l (a2)+,a0 ;last_line_ptr
- movea.l (a0),a1 ;î╗ì▌é╠âAâhâîâX
- cmpa.l (a2),a1 ;last_line_adr
- bne into_backscroll_redraw
- tst.l (a2)+
- bmi into_backscroll_skip_draw
- cmpm.b (a2)+,(a1)+ ;last_line_byte
- beq into_backscroll_skip_draw
- into_backscroll_redraw:
- bsr clear_cursor
- bsr check_column
-
- move.l a0,d0
- pea (line_buf,pc)
- sub.l (sp)+,d0
- lsr #2,d0 ;d0=last_line
- into_backscroll_redraw_loop:
- tst.l (a0)+
- bmi into_backscroll_skip_draw
- bsr draw_line_d0
- addq #1,d0
- cmp (window_line,pc),d0
- bls into_backscroll_redraw_loop
- bra into_backscroll_skip_draw
-
- tst_and_clr_sleep_flag:
- lea (sleep_flag,pc),a0
- tst.b (a0)
- sf (a0)
- rts
-
- into_backscroll_at_top:
- bsr tst_and_clr_sleep_flag
- bne into_backscroll_skip_open
- into_backscroll_open_draw:
- bsr open_backscroll_window
- into_backscroll_skip_open:
- bsr draw_backscroll
- bsr call_orig_b_keyinp ;âIü[âvâôÄ₧é╠âLü[ôⁿù═é≡Å┴é╖
- into_backscroll_skip_draw:
- bclr #SUSPEND_bit,(bitflag)
- * }
- bsr keyinp_loop_start ;âüâCâôâïü[âv
- * sleepæ╬ë₧ {
- move.b (sleep_flag,pc),d0
- beq not_sleep_exit
-
- move (window_line,pc),d0
- lea (line_buf,pc),a0
- tst.l (a0)
- bmi @f
- get_last_line_loop:
- tst.l (a0)+
- dbmi d0,get_last_line_loop
- subq.l #4,a0
- bpl @f
- subq.l #4,a0
- @@: lea (last_line_ptr,pc),a2
- movea.l (a0),a1
- move.l a0,(a2)+ ;last_line_ptr
- move.l a1,(a2)+ ;last_line_adr
- move.l a1,d0
- bmi @f
- move.b (a1),(a2)+ ;last_line_byte
- @@: bra iocs_keysns_return_0
-
- not_sleep_exit:
- * }
- bsr close_backscroll_window
- bsr wait_release_ctrl_key
- bra iocs_keysns_return_0
-
- wait_release_ctrl_key:
- move.b (option_p_flag,pc),d0
- beq 1f
- move.l (past_pointer,pc),a0
- tst.b (a0)
- beq 1f
- @@:
- SFTbtst SFT_CTRL
- bne @b
- 1:
- rts
-
-
- * ^1 , ~ü½ , ~UNDO : ì┼îπé╠âJü[â\âïê╩Æué⌐éτâoâbâNâìâOé╔ôⁿéΘ
- direct_key_backscroll_1:
- bsr is_text_used
- beq iocs_keysns_flush
- wakeup_backscroll:
- bsr check_backscroll_buffer
-
- move (line_buf,pc),d0
- bmi @f ;ëƒé╡Åoé│éΩé─éóé╜Ä₧é═êΩö╘î├éóê╩Æué≡ò\Ī
-
- bsr reset_line_address_buf
- bra into_backscroll_at_lastpos
- @@:
- bsr beginning_of_buffer_sub
- lea (cursorX,pc),a0
- clr.l (a0)+ ;cursorX/Xbyte
- clr (a0) ;cursorY
- bra into_backscroll_at_top
-
- end_of_buffer_sub:
- moveq #-1,d2
- move (window_line,pc),d1
- lea (line_buf,pc),a3
- move d1,d0
- @@:
- move.l d2,(a3)+ ;ìsâAâhâîâXâoâbâtâ@é≡ûäé▀éΘ
- dbra d0,@b
-
- movea.l (buffer_now,a6),a0
- .ifndef __EOBCUR
- tst.b (a0)
- beq scroll_down_p_sub ;ëⁿìsÆ╝îπé╚éτæOé╠ìsé▄é┼é≡ò\Īé╖éΘ
- .endif
- scroll_down_loop:
- movea.l a3,a1 ;a1=ì┼îπ+1
- lea (-4,a1),a2 ;a2=ì┼îπ
- move d1,d0
- subq #1,d0
- @@:
- move.l -(a2),-(a1) ;ë║é╔é╕éτé╖
- dbra d0,@b
-
- move.l a0,(a2)
- addq #1,d2
- scroll_down_p_sub:
- subq.l #1,a0
- TopChk a0
- moveq #0,d0
- move.b (a0),d0
- beq end_of_buffer_end ;é▒éΩéµéΦæOé╠ìsé═é╚éó
- suba d0,a0
- subq.l #1,a0
- TopChk a0
-
- cmp d1,d2 ìsÉö-1>ò\ĪìsÉö-1
- * bcs scroll_down_loop
- blt scroll_down_loop d2=$ffffé╠Ä₧éαîJéΦò╘é╖
- end_of_buffer_end:
- rts
-
- reset_line_address_buf:
- movea.l (line_buf,pc),a0
- reset_line_address_buf_2:
- bsr fill_line_address_buf
- move.l a0,d0 ;âoâbâtâ@é¬ï≤é╠Ä₧é═æSé─-1é┼ûäé▀éΘ
- bpl @f
- rts
-
- beginning_of_buffer_sub:
- bsr fill_line_address_buf
- movea.l (buffer_old,a6),a0
- addq.l #1,a0
- set_line_address_loop:
- EndChk a0
- @@:
- moveq #0,d0
- move.b (a0),d0
- .ifndef __EOBCUR
- beq @f
- .endif
- move.l a0,(a3)+
- addq.l #1,a0
- adda d0,a0
- EndChk2 a0
- tst.b (a0)+
- dbeq d1,set_line_address_loop
- @@:
- rts
-
- fill_line_address_buf:
- moveq #-1,d2
- move (window_line,pc),d1
- lea (line_buf,pc),a3
- move d1,d0
- movea.l a3,a1
- @@:
- move.l d2,(a1)+
- dbra d0,@b
- rts
-
- draw_backscroll:
- lea (line_buf,pc),a0
- movea.l (text_address,pc),a2
- move (window_line,pc),d2
- draw_backscroll_loop:
- movea.l (a0)+,a1
- bsr draw_line
- lea ($800,a2),a2
- dbra d2,draw_backscroll_loop
- rts
-
- * âoâbâNâXâNâìü[âïâEâBâôâhâEé≡ò\Īé╖éΘ -------- *
-
- open_backscroll_window:
- bsr swap_interrupt_address
- bsr initialize_keypast_buffer
-
- lea (bitflag,pc),a1
- bset #BACKSCR_bit,(a1)
-
- btst #SUSPEND_bit,(a1)
- bne set_text_mode
-
- * ÉVïKâIü[âvâôÄ₧
- lea (TEXTPAL),a0
- lea (text_pal_buff,pc),a1
- moveq #16/2-1,d0
- @@:
- move.l (a0)+,(a1)+ ;âeâLâXâgâpâîâbâgæ╥ö≡
- dbra d0,@b
-
- btst #0,(option_m_flag,pc)
- beq @f
-
- lea (ms_ctrl_flag,pc),a0
- st (a0)+
- move.b (SKEYMOD),(a0)+ ;skeymod_save
- IOCS _MS_STAT
- move.b d0,(a0) ;mscur_on_flag
-
- moveq #0,d1
- IOCS _SKEY_MOD ;â\âtâgâLü[â{ü[âh/â}âEâXâJü[â\âïÅ┴ïÄ
- IOCS _MS_CUROF
- @@:
- btst #1,(option_m_flag,pc)
- beq @f
-
- move #0<<8+32*4,d1
- move d1,d2 ;æSëµû╩ò█æ╢
- moveq #%1100,d3
- IOCS _TXRASCPY
- @@:
- btst #2,(option_m_flag,pc)
- bne @f
-
- moveq #2,d2 ;âeâLâXâgÄgùpÅ≤ï╡é≡û│Äïé╡é╚éóé╚éτ
- bsr gm_tgusemd_orig ;ÄgùpÆåé╔É▌ÆΦé╖éΘ
- @@:
-
- * Graphic Maské╠automaské≡ï╓Ä~é╖éΘ(âoâbâNâXâNâìü[âïëµû╩é¬
- * ò\Īé│éΩé─éóéΘè╘üAsuspend/sleepÆåéαé╕é┴é╞ï╓Ä~é╡é╜é▄é▄).
- lea (gm_automask,pc),a0
- clr.b (a0)
- GMcall _GM_AUTO_STATE
- bne @f
- swap d0
- subq.b #%10,d0
- bne @f ;î│é⌐éτï╓Ä~Å≤æ╘
- st (a0)
- GMcall _GM_AUTO_DISABLE
- @@:
-
- set_text_mode:
- GMcall _GM_MASK_STATE
- beq @f
- moveq #0,d0 ;gmé¬ÅφÆôé╡é─éóé╚éóé╚éτÅφé╔maské╚é╡
- @@: swap d0
- lea (general_work,pc),a1
- move.b d0,(gm_maskflag-general_work,a1)
-
- move (text_pal_buff,pc),d1 ;âpâîâbâg0(òWÅÇé┼ìò)
- move (text_pal_buff+3*2,pc),d2 3(üV öÆ)
-
- * lea (general_work,pc),a1
- move.l a1,-(sp)
- clr.l -(sp)
- pea (condrv_pal,pc)
- DOS _GETENV
- addq.l #12-4,sp
- move.l d0,(sp)+
- bmi @f
-
- bsr get_palette ;ò╢ÄÜÉF
- move d1,d2
- bsr get_palette ;öwîiÉF
- @@:
- lea (TEXTPAL+2*4),a1
- bsr set_text_palette ;%01xx
-
- move d2,d1
- addq.l #2*4,a1
- bsr set_text_palette ;%11xx
-
- bsr clear_text_plane ;âoâbâNâìâOëµû╩ôhéΦé┬é╘é╡
- bsr draw_window_tipline ;ÅπÆ[é╞ë║Æ[é╠ëíÉⁿé≡ò`é¡
-
- lea (cursor_blink_count,pc),a0
- clr (a0)+
- move (CSRSWITCH),(a0) ;iocs_curflg
- btst #3,(option_m_flag,pc)
- bne @f
- IOCS _OS_CUROF
- @@:
- .ifdef __EMACS
- rts
- .else
- bra clr_ins_led
- .endif
-
- set_text_palette:
- .rept 4
- move d1,(a1)+
- .endm
- rts
-
- .ifndef __EMACS
- restore_ins_led:
- bset #LED_INS,(LEDSTAT)
- move.b (ins_clr_flag,pc),d0
- bne call_iocs_ledset * INS LED é═ì┼Åëé⌐éτô_ôö
- clr_ins_led:
- bclr #LED_INS,(LEDSTAT) * INS é≡Å┴é╖
- sne (ins_clr_flag)
- call_iocs_ledset:
- IOCS _LEDSET
- rts
- .endif
-
- * è┬ï½ò╧Éöé⌐éτâpâîâbâgÆlé≡ĵéΦÅoé╖
- * in a1.l = è┬ï½ò╧Éö
- * out d1.w = ÉöÆl
- get_palette:
- moveq #0,d0
- moveq #0,d1
- lea (ctype_table,pc),a0
- bra get_palette_loop
- get_palette_loop_2:
- cmpi.b #SPACE,d0
- beq get_palette_loop
- btst #IS_HEX_bit,(a0,d0.w)
- beq get_palette_end
- btst #IS_DEC_bit,(a0,d0.w)
- bne @f
- andi.b #$df,d0 A-Fa-fé╠Ä₧é═'9'é╠îπé╔é╕éτé╖
- subq.b #'A'-('9'+1),d0
- @@:
- andi.b #$f,d0
- lsl #4,d1
- or d0,d1
- get_palette_loop:
- move.b (a1)+,d0
- bne get_palette_loop_2
- subq.l #1,a1
- get_palette_end:
- rts
-
- * âoâbâNâìâOëµû╩ôhéΦé┬é╘é╡ -------------------- *
-
- clear_text_plane:
- usereg: .reg d0-d7/a0-a2
- PUSH usereg
-
- lea (CRTC_R21),a0
- move (a0),-(sp)
- bclr #0,(a0)
-
- movea.l (text_address,pc),a1
- lea ($200-$400,a1),a1 ;plane 3 âNâèâA
- bsr fill_text_block_0
-
- adda.l #$200-$20000,a1 ;plane 2 ôhéΦÆ╫é╡
- moveq #-1,d1
- bsr fill_text_block
-
- move (sp)+,(a0)
-
- move (text_ras_no,pc),d1
- subi #$0201,d1
- move (window_line,pc),d2
- addq #3,d2
- lsl #2,d2
- subq #1,d2
- moveq #%1100,d3
- IOCS _TXRASCPY
-
- POP usereg
- rts
-
- fill_text_block_0:
- moveq #0,d1
- fill_text_block:
- .irp reg,d2,d3,d4,d5,d6,d7,a2
- move.l d1,reg
- .endm
- moveq #16-1,d0
- @@:
- movem.l d1-d7/a2,-(a1)
- dbra d0,@b
- rts
-
- * ÅπÆ[é╞ë║Æ[é╠ëíÉⁿé≡ò`é¡ ---------------------- *
-
- draw_window_tipline:
- movea.l (text_address,pc),a1
- lea (-4*128,a1),a0 ;Åπé╠Éⁿ
- moveq #1,d0
- add (window_line,pc),d0
- lsl #4,d0 ;*16
- addq #4,d0
- lsl.l #7,d0 ;*128
- adda.l d0,a1
-
- moveq #WIDTH/4-1,d0
- moveq #-1,d1
- @@:
- move.l d1,(a0)+
- move.l d1,(a1)+
- dbra d0,@b
- rts
-
- * ê╚æOé╠âüâbâZü[âWò\Īìsé≡Å┴ïÄé╖éΘ ------------ *
- * in a4.l window_line
-
- clear_text_raster_mesline:
- move (a4),d1 ;window_line
- add -(a4),d1 ;down_line
- addq #2+1,d1
- lsl #2,d1
- bra clear_text_raster_m4
-
- * ÄwÆΦìsé≡Å┴ïÄé╖éΘ ---------------------------- *
- * in d1.w âëâXâ^ö╘ìå(0ü`255)
-
- clear_text_raster_m4:
- moveq #-1,d0 ;maskéáéΦ
- moveq #4-1,d2
- bra clear_text_raster
-
- * ÄwÆΦâëâXâ^âuâìâbâNé≡Å┴ïÄé╖éΘ ---------------- *
- * âeâLâXâgò█æ╢âéü[âhé╚éτùáëµû╩é⌐éτò£ïAé╖éΘ
- * in d0.b 0:GMö±æ╬ë₧(Åφé╔æSÅ┴ïÄ) -1:GMæ╬ë₧(â}âXâNé≡é⌐é»éΘ)
- * âeâLâXâgò█æ╢âéü[âhorùáëµû╩ÄwÆΦé╠Ä₧û│ê╙ûí
- * d1.w âëâXâ^ö╘ìå(0ü`255)
- * d2.w âëâXâ^Éö-1
-
- clear_text_raster:
- usereg: .reg d1-d7/a0-a2
- PUSH usereg
-
- tst.b d1
- bmi clear_text_raster_force_clear
- btst #1,(option_m_flag,pc)
- beq clear_text_raster_mask_clear
-
- move.b d1,d0
- tas d1 ;ùáëµû╩é⌐éτò\é╔âRâsü[
- lsl #8,d1
- move.b d0,d1
- addq #1,d2
- bra clear_text_raster_rascpy
-
- clear_text_raster_force_clear:
- moveq #0,d0 ;ùáëµû╩é═maské╡é╚éó
- clear_text_raster_mask_clear:
- move.b d1,-(sp) ;!
- move d2,-(sp) ;!
-
- lea (CRTC_R21),a0
- move (a0),-(sp)
- move #%1_1100_0000,(a0)
-
- move.b d0,-(sp)
-
- addi #($e60000+128*4)/(128*4),d1
- mulu #128*4,d1
- movea.l d1,a1
- bsr fill_text_block_0 ;âvâîü[âô2/3é≡âNâèâAé╖éΘ
-
- move.b (sp)+,d0
- and.b (gm_maskflag,pc),d0
- beq clear_text_raster_copy
-
- clr (a0) ;graphic maské≡é⌐é»éΘ
- moveq #-1,d0
- moveq #-1,d1
- moveq #-1,d2
- moveq #-1,d3
- moveq #4-1,d4
- @@:
- movem.l d0-d3,(a1)
- movem.l d0-d3,(80,a1)
- lea (128,a1),a1
- dbra d4,@b
- clear_text_raster_copy:
- move (sp)+,(a0)
-
- move (sp)+,d2 ;!
- move (sp),d1 ;!
- move.b (sp)+,d1
- addq.b #1,d1
- clear_text_raster_rascpy:
- moveq #%1100,d3
- IOCS _TXRASCPY ;ë║é╔òíÄ╩é╖éΘ
-
- POP usereg
- rts
-
- * âoâbâNâXâNâìü[âïëµû╩é≡Å┴ïÄé╖éΘ -------------- *
-
- close_backscroll_window:
- .ifndef __EMACS
- lea (mark_char_adr,pc),a0 ;â}ü[âNâNâèâA
- move.l (a0),d3
- clr.l (a0)+ ;mark_char_adr
- clr.l (a0)+ ;mark_line_adr
- .endif
-
- btst #2,(option_m_flag,pc)
- bne @f
- ;âeâLâXâgÄgùpÅ≤ï╡é≡û│Äïé╡é╚éóé╚éτ
- bsr gm_tgusemd_orig_tm1 ;âVâXâeâÇé┼ÄgùpÆåé╔É▌ÆΦé╖éΘ
- @@:
- .ifdef __EMACS
- btst #SUSPEND_bit,(bitflag,pc)
- bne dont_restore_text
- bra restore_text
- .else
- btst #SUSPEND_bit,(bitflag,pc)
- beq restore_text
- * ctrl-undo {
- tst.l d3
- beq @f
- bsr draw_backscroll ;â}ü[âNë≡Å£Å≤æ╘é┼ò`é½Æ╝é╖
- @@:
- bra dont_restore_text
- * }
- .endif
- restore_text:
- btst #1,(option_m_flag,pc)
- bne restore_text_from_backside
-
- moveq #-1,d0 ;maskéáéΦ
- move (down_line,pc),d1
- lsl #2,d1
- move (window_line,pc),d2
- addq #3,d2
- lsl #2,d2
- subq #1,d2
- bra @f
- restore_text_from_backside:
- move #32*4<<8+0,d1 ;-m2ÄwÆΦÄ₧é═ùáTVRAMé⌐éτâRâsü[
- move #32*4,d2
- moveq #%1100,d3
- IOCS _TXRASCPY
-
- moveq #0,d0
- move #32*4,d1
- moveq #32*4-1,d2
- @@:
- bsr clear_text_raster ;ò\orùáëµû╩Å┴ïÄ
-
- lea (ms_ctrl_flag,pc),a0
- tst.b (a0)
- beq mouse_ctrl_off
-
- clr.b (a0)+
-
- moveq #0,d1
- move.b (a0)+,d1 ;skeymod_save
- IOCS _SKEY_MOD ;â\âtâgâLü[â{ü[âhé╠Å≤æ╘é≡û▀é╖
-
- tst.b d1
- bmi @f
- tst.b (a0) ;mscur_on_flag
- beq @f
-
- IOCS _MS_CURON
- @@:
- mouse_ctrl_off:
- lea (text_pal_buff,pc),a0
- lea (TEXTPAL),a1
- moveq #16/2-1,d0
- @@:
- move.l (a0)+,(a1)+
- dbra d0,@b
-
- move.b (gm_maskflag,pc),d0
- beq @f
- GMcall _GM_MASK_SET
- @@:
-
- * Graphic Maské╠automaské≡ï╓Ä~é╡é─éóé╜ÅΩìçüAïûë┬Å≤æ╘é╔û▀é╖.
- * (suspendé╡é╜ÅΩìçé═û▀é│é╚éó. sleepéαô»é╢)
- move.b (gm_automask,pc),d0
- beq @f
- GMcall _GM_AUTO_ENABLE
- @@:
-
- dont_restore_text:
- .ifndef __EMACS
- bsr restore_ins_led
- .endif
- btst #3,(option_m_flag,pc)
- bne @f
- move (iocs_curflg,pc),(CSRSWITCH)
- @@:
- lea (bitflag,pc),a0
- bclr #BACKSCR_bit,(a0)
- bra swap_interrupt_address
-
- swap_interrupt_address:
- lea (TIMERA_VEC),a0
- lea (vdisp_int_adr,pc),a1 ;ÉéÆ╝ô»è·èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
- bsr swap_interrupt_address_sub
-
- lea (CIRQ_VEC),a0
- lea (ras_int_adr,pc),a1 ;âëâXâ^èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
- swap_interrupt_address_sub:
- move.l (a1),d0
- beq @f ;û│î°é╔é╡é╚éó
-
- move.l (a0),(a1)
- move.l d0,(a0)
- @@: rts
-
-
- * âoâbâNâìâOôαé╠âLü[ôⁿù═âTâuâïü[â`âô ---------- *
-
- * next-line é╚é╟é┼êΩÄ₧ôIé╔ÆZéóìsü`Æ╖éóìsé╞ê┌ô«é╡é╜Ä₧üA
- * âJü[â\âïê╩Æué═ì┼Åëé╠ìsé╞ô»é╢îàé╔ê┌ô«é│é╣éΘ.
- * é▒é╠ê╫é╔î╗ì▌é╠ CursorX é≡ì┼Åëé╠ê╩Æué╞é╡é─ïLë»é╖éΘ.
- * é╜é╛é╡üAnext-lineüAprevious-lineüAnext-pageüAprevious-page
- * é╚é╟é═ïLë»é╡é─éóéΘîàê╩Æué≡é╗é╠é▄é▄é╔é╡é─é¿é¡.
-
- keyinp_loop_start:
- keyinp_loop2:
- lea (curx_save_flag,pc),a0
- tas (a0)
- bne @f ;îàê╩Æué═é╗é╠é▄é▄
- move (cursorX,pc),(curx_save-curx_save_flag,a0)
- @@:
- keyinp_loop:
- bsr blink_cursor
- bsr call_orig_b_keysns
- ** tst.l d0
- ** beq keyinp_loop
- * sleepæ╬ë₧ {
- tst.l d0
- bne @f
- btst #OPT_BG_bit,(option_flag,pc)
- beq keyinp_loop
- lea (bitflag,pc),a0
- tst.b (a0)
- bmi keyinp_loop ;helpÆå
-
- bset #SUSPEND_bit,(a0) ;âoâbâNâXâNâìü[âïé⌐éτö▓é»éΘ
- st (sleep_flag-bitflag,a0)
- rts
- @@:
- * }
- cmpi #KEY_SHIFT.shl.8,d0
- bcc @f
- move.l (mes_end_adr,pc),d0 ;âGâëü[âüâbâZü[âWé≡ò\Īé╡é─éóé╜éτ
- beq @f ;ăé╠âLü[é¬ôⁿù═é│éΩé╜Ä₧é╔Å┴é╖
- bsr clear_message
- @@:
- pea (keyinp_loop2,pc) ê╚îπé═âïü[âvé╖éΘÄ₧é═ rts
- bsr call_orig_b_keyinp
-
- move d0,-(sp) âLü[âoâbâtâ@é¬é╜é▄é┴é─éóé╚éóé⌐Æ▓é╫éΘ
- bsr call_orig_b_keysns
- move (sp),d1
- cmp d0,d1
- bne @f êßéñâLü[é¬ëƒé│éΩé─éóéΘÅΩìçéαOK
-
- lsr #8,d1
- move d1,d0
- lsr #3,d0
- lea (KEYSTAT),a0
- adda d0,a0
- btst d1,(a0)
- bne @f ô»é╢âLü[é¬é▄é╛ëƒé│éΩé─éóéΘ
-
- bsr keybuf_clear
- @@:
- .ifdef __EMACS
-
- PREFIX_ESC: .equ 7
- PREFIX_CTRL_X: .equ 6
-
- keyinp_direct:
- move (sp)+,d0
- move.b ($80e),d0
- lea (prefix_flag,pc),a0
- or.b (a0),d0
- KEYbtst KEY_XF3
- beq @f
- tas d0 * bset #PREFIX_ESC,d0
- @@:
- rol #8,d0
- * cmpi.b #KEY_SHIFT,d0
- cmpi.b #$6d,d0
- bcc keycheck_end ;shift/ctrl/opt.1&2 or ùúé╡é╜Ä₧é═û│Äï
- cmpi.b #KEY_BREAK,d0
- bcc @f
- cmpi.b #KEY_XF1,d0
- bcc keycheck_end ;xf1ü`5/LEDâLü[é═û│Äï
- @@:
- clr.b (a0)
-
- lea (emacs_key_table,pc),a0
- bsr keycheck ;braé╔é╡é╚éóÄû!
- keycheck_end:
- rts
-
- .else
-
- moveq #0,d0
- move.b (sp)+,d0
- move.b (option_o_flag,pc),d1 0:Shift 1:CTRL 2:OPT.1 3:OPT.2
- btst d1,(SFTSTAT)
- beq is_key_ctrl
- * OPT.1în
- lea (opt_key_table,pc),a0
- bsr keycheck
- move.b (option_o_flag,pc),d1
- subq.b #2,d1
- bcc keycheck_end -o1,2 é╚éτÅIéφéΦ
- is_key_ctrl:
- SFTbtst SFT_CTRL
- bne check_ctrl_key
- * âVâtâgîné╚é╡
- lea (nomal_key_table,pc),a0
- SFTbtst SFT_SHIFT
- beq @f
- * Shiftîn
- lea (shift_key_table,pc),a0
- bra @f
- * CTRLîn
- check_ctrl_key:
- lea (ctrl_key_table,pc),a0
- bsr keycheck
- lea (ctrl_key_table_2,pc),a0
- @@:
- bsr keycheck òKé╕bsr
- keycheck_end:
- rts
-
- .endif
- * ïñÆ╩òöò¬ {
-
- keycheck:
- move (a0)+,d1 address/flag
- .ifdef __EMACS
- beq visual_bell
- .else
- beq keycheck_end
- .endif
- cmp (a0)+,d0 keycode
- bne keycheck
-
- bclr #0,d1
- seq (curx_save_flag)
- adda d1,a0
- move.l a0,(sp) ;î─é╤Åoé╡é╜é╞é▒éδé╔é═û▀éτé╚é¡é─éµéó
- bra clear_cursor
-
- * flag = 1: âJü[â\âïê╩Æué≡ìXÉVé╖éΘ.
- * flag = 0: î╗ì▌é╠âJü[â\âïê╩Æué═êΩÄ₧ôIé╚éαé╠é╞î⌐é╚é╡üAcurx_save é═ìXÉVé╡é╚éó.
-
- KEYTBL: .macro keycode,flag,address
- .dc (address-($+4)).or.flag,keycode
- .endm
- KEYTBL_END: .macro
- .dc 0
- .endm
-
- * }
- .ifdef __EMACS
-
- * META C-x 0 0 | OPT.2 OPT.1 CTRL SHIFT
-
- emacs_key_table:
- KEYTBL KEY_ESC ,0,key_prefix_meta
- KEYTBL KEY_HELP ,0,key_help
- KEYTBL KEY_HOME ,0,key_kill_condrv
- KEYTBL KEY_UNDO ,0,key_kill_condrv
- KEYTBL KEY_Q ,0,key_kill_condrv
- KEYTBL KEY_CLR ,0,key_kill_condrv
- KEYTBL KEY_ü⌐ ,1,key_backward_char
- KEYTBL KEY_B ,1,key_backward_char
- KEYTBL KEY_ü¿ ,1,key_forward_char
- KEYTBL KEY_F ,1,key_forward_char
- KEYTBL KEY_ü¬ ,0,key_previous_line
- KEYTBL KEY_P ,0,key_previous_line
- KEYTBL KEY_ü½ ,0,key_next_line
- KEYTBL KEY_N ,0,key_next_line
- KEYTBL KEY_R_DOWN ,0,key_scroll_down
- KEYTBL KEY_R_UP ,0,key_scroll_up
- KEYTBL KEY_DEL ,0,key_kill_region
- KEYTBL KEY_CR ,0,key_yank_current_word
- KEYTBL KEY_K ,0,key_yank_to_end_of_line
- KEYTBL KEY_U ,0,key_yank_from_beginning_of_line
- KEYTBL KEY_TAB ,0,key_toggle_past_header_tab
- KEYTBL KEY_üF ,0,key_toggle_past_header_colon
- KEYTBL KEY_ü| ,0,key_toggle_past_header_hyphen
- KEYTBL KEY_F0 ,1,key_beginning_of_buffer
- KEYTBL KEY_F1 ,1,key_end_of_buffer
- KEYTBL KEY_ü^ ,1,key_search_forward
- KEYTBL KEY_F3 ,1,key_search_forward
- KEYTBL KEY_F4 ,1,key_search_forward_next
- SHIFT: .equ %0000_0001.shl.8
- KEYTBL SHIFT+KEY_T ,1,key_beginning_of_page
- KEYTBL SHIFT+KEY_B ,1,key_end_of_page
- KEYTBL SHIFT+KEY_üä ,0,key_toggle_past_header_bracket
- KEYTBL SHIFT+KEY_ü^ ,1,key_search_backward
- KEYTBL SHIFT+KEY_F3 ,1,key_search_backward
- KEYTBL SHIFT+KEY_F4 ,1,key_search_backward_next
- KEYTBL SHIFT+KEY_N ,1,key_search_backward_next
- CTRL_: .equ %0000_0010.shl.8
- KEYTBL CTRL_+KEY_X ,0,key_prefix_ctrl_x
- KEYTBL CTRL_+KEY_Z ,0,key_suspend_condrv
- KEYTBL CTRL_+KEY_UNDO ,0,key_suspend_condrv
- KEYTBL CTRL_+KEY_B ,1,key_backward_char
- KEYTBL CTRL_+KEY_F ,1,key_forward_char
- KEYTBL CTRL_+KEY_P ,0,key_previous_line
- KEYTBL CTRL_+KEY_N ,0,key_next_line
- KEYTBL CTRL_+KEY_A ,1,key_beginning_of_line
- KEYTBL CTRL_+KEY_E ,1,key_end_of_line
- KEYTBL CTRL_+KEY_R_DOWN,1,key_beginning_of_buffer_mark
- KEYTBL CTRL_+KEY_R_UP ,1,key_end_of_buffer_mark
- KEYTBL CTRL_+KEY_V ,0,key_scroll_up
- KEYTBL CTRL_+KEY_SPACE ,1,key_set_mark
- KEYTBL CTRL_+KEY_W ,0,key_kill_region
- KEYTBL CTRL_+KEY_Y ,0,key_yank_region
- KEYTBL CTRL_+KEY_ü¬ ,0,key_shrink_window
- KEYTBL CTRL_+KEY_ü½ ,0,key_grow_window
- KEYTBL CTRL_+KEY_ü⌐ ,0,key_move_window_up
- KEYTBL CTRL_+KEY_ü¿ ,0,key_move_window_down
- KEYTBL CTRL_+KEY_K ,0,key_kill_to_end_of_line
- KEYTBL CTRL_+KEY_U ,0,key_kill_from_beginning_of_line
- KEYTBL CTRL_+KEY_S ,1,key_isearch_forward
- KEYTBL CTRL_+KEY_R ,1,key_isearch_backward
- KEYTBL CTRL_+KEY_üO ,1,key_search_forward_current_word
- KEYTBL CTRL_+KEY_ü_ ,1,key_search_backward_current_word
- KEYTBL CTRL_+KEY_I ,0,key_toggle_past_header_tab
- KEYTBL CTRL_+KEY_BS ,0,key_toggle_buffering_mode
- KEYTBL CTRL_+KEY_CLR ,1,key_clear_buffer
- KEYTBL CTRL_+KEY_L ,1,key_redraw_window
- KEYTBL CTRL_+KEY_üm ,0,key_prefix_meta
- KEYTBL CTRL_+KEY_üù ,0,key_prefix_meta ;ASCIIözù±ùp
- C_X: .equ %0100_0000.shl.8
- KEYTBL C_X+KEY_I ,1,key_insert_file
- KEYTBL C_X+KEY_W ,1,key_write_file
- KEYTBL C_X+KEY_Z ,0,key_grow_window
- KEYTBL C_X+KEY_M ,0,key_toggle_buffer_mode
- .ifdef __BUF_POS
- C_X_SFT: .equ C_X+SHIFT
- KEYTBL C_X_SFT+KEY_ü| ,0,key_buffer_position
- .endif
- C_X_CTRL: .equ C_X+CTRL_
- KEYTBL C_X_CTRL+KEY_I ,1,key_insert_file
- KEYTBL C_X_CTRL+KEY_W ,1,key_write_file
- KEYTBL C_X_CTRL+KEY_C ,0,key_kill_condrv
- KEYTBL C_X_CTRL+KEY_Z ,0,key_shrink_window
- KEYTBL C_X_CTRL+KEY_P ,0,key_move_window_up
- KEYTBL C_X_CTRL+KEY_N ,0,key_move_window_down
- KEYTBL C_X_CTRL+KEY_X ,1,key_exchange_point_and_mark
- KEYTBL C_X_CTRL+KEY_S ,1,key_search_forward
- KEYTBL C_X_CTRL+KEY_R ,1,key_search_backward
- KEYTBL C_X_CTRL+KEY_M ,0,key_toggle_text_mode
- META: .equ %1000_0000.shl.8
- KEYTBL META+KEY_ESC ,0,key_prefix_meta_cancel
- KEYTBL META+KEY_SPACE ,1,key_set_mark
- KEYTBL META+KEY_üD ,1,key_set_mark
- KEYTBL META+KEY_Q ,0,key_kill_condrv
- KEYTBL META+KEY_B ,1,key_backward_word
- KEYTBL META+KEY_F ,1,key_forward_word
- KEYTBL META+KEY_V ,0,key_scroll_down
- KEYTBL META+KEY_W ,0,key_copy_region
- KEYTBL META+KEY_R_DOWN ,0,key_slide_window_up
- KEYTBL META+KEY_R_UP ,0,key_slide_window_down
- KEYTBL META+KEY_N ,1,key_search_forward_next
- KEYTBL META+KEY_I ,0,key_toggle_tab_disp
- S_META: .equ SHIFT+META
- KEYTBL S_META+KEY_üH ,0,key_help
- KEYTBL S_META+KEY_üâ ,1,key_beginning_of_buffer_mark
- KEYTBL S_META+KEY_üä ,1,key_end_of_buffer_mark
- KEYTBL S_META+KEY_üû ,0,key_toggle_cr_disp
- C_META: .equ CTRL_+META
- KEYTBL C_META+KEY_üm ,0,key_prefix_meta_cancel
- KEYTBL C_META+KEY_üù ,0,key_prefix_meta_cancel ;ASCIIözù±ùp
- KEYTBL C_META+KEY_G ,1,key_goto_mark
- KEYTBL_END
-
- key_prefix_meta:
- lea (prefix_meta_mes,pc),a1
- moveq #PREFIX_ESC,d0
- bra @f
- key_prefix_ctrl_x:
- lea (prefix_ctrlx_mes,pc),a1
- moveq #PREFIX_CTRL_X,d0
- @@:
- bsr print_message
- lea (prefix_flag,pc),a0
- bset d0,(a0)
- key_prefix_meta_cancel:
- rts
-
- .else
- nomal_key_table:
- KEYTBL KEY_ESC ,0,key_kill_condrv
- KEYTBL KEY_HOME ,0,key_kill_condrv
- KEYTBL KEY_UNDO ,0,key_kill_region
- KEYTBL KEY_R_UP ,0,key_scroll_up
- KEYTBL KEY_R_DOWN ,0,key_scroll_down
- KEYTBL KEY_A ,1,key_backward_word
- KEYTBL KEY_F ,1,key_forward_word
- KEYTBL KEY_ü¬ ,0,key_previous_line
- KEYTBL KEY_ü½ ,0,key_next_line
- KEYTBL KEY_ü⌐ ,1,key_backward_char
- KEYTBL KEY_ü¿ ,1,key_forward_char
- KEYTBL KEY_M ,0,key_mark_change_led
- KEYTBL KEY_INS ,0,key_mark_dont_change_led
- KEYTBL KEY_K ,0,key_yank_to_end_of_line
- KEYTBL KEY_O ,0,key_kill_region
- KEYTBL KEY_DEL ,0,key_kill_region
- KEYTBL KEY_CR ,0,key_yank
- KEYTBL KEY_ENTER ,0,key_yank
- KEYTBL KEY_U ,0,key_yank_from_beginning_of_line
- KEYTBL KEY_ü^ ,1,key_search_forward
- KEYTBL KEY_F3 ,1,key_search_forward
- KEYTBL KEY_N ,1,key_search_forward_next
- KEYTBL KEY_F4 ,1,key_search_forward_next
- KEYTBL KEY_HELP ,0,key_help
- KEYTBL KEY_üF ,0,key_toggle_past_header_colon
- KEYTBL KEY_ü| ,0,key_toggle_past_header_hyphen
- KEYTBL KEY_TAB ,0,key_toggle_past_header_tab
- KEYTBL KEY_T ,1,key_beginning_of_buffer
- KEYTBL KEY_F0 ,1,key_beginning_of_buffer
- KEYTBL KEY_B ,1,key_end_of_buffer
- KEYTBL KEY_F1 ,1,key_end_of_buffer
- KEYTBL KEY_L ,0,key_set_label
- KEYTBL KEY_Q ,0,key_toggle_buffer_mode
- * KEYTBL_END
- ctrl_key_table_2: * CTRL é≡ëƒé╡é─éαëƒé│é╚é¡é─éαô»é╢éαé╠
- KEYTBL KEY_W ,0,key_move_window_up
- KEYTBL KEY_Z ,0,key_move_window_down
- KEYTBL KEY_E ,0,key_previous_line
- KEYTBL KEY_X ,0,key_next_line
- KEYTBL KEY_D ,1,key_forward_char
- KEYTBL KEY_S ,1,key_backward_char
- KEYTBL KEY_P ,0,key_yank
- KEYTBL_END
- opt_key_table:
- KEYTBL KEY_ü⌐ ,0,key_move_window_up
- KEYTBL KEY_ü¿ ,0,key_move_window_down
- KEYTBL KEY_UNDO ,0,key_suspend_condrv
- KEYTBL KEY_R_UP ,0,key_slide_window_down
- KEYTBL KEY_R_DOWN ,0,key_slide_window_up
- KEYTBL KEY_ü¬ ,0,key_shrink_window
- KEYTBL KEY_ü½ ,0,key_grow_window
- KEYTBL_END
- ctrl_key_table:
- KEYTBL KEY_üm ,0,key_kill_condrv
- KEYTBL KEY_R ,0,key_scroll_down
- KEYTBL KEY_C ,0,key_scroll_up
- KEYTBL KEY_T ,1,key_beginning_of_page
- KEYTBL KEY_B ,1,key_end_of_page
- KEYTBL KEY_A ,1,key_beginning_of_line
- KEYTBL KEY_F ,1,key_end_of_line
- KEYTBL KEY_K ,0,key_kill_to_end_of_line
- KEYTBL KEY_U ,0,key_kill_from_beginning_of_line
- KEYTBL KEY_N ,1,key_search_backward_next
- KEYTBL KEY_üù ,1,key_write_file
- KEYTBL KEY_J ,0,key_help
- KEYTBL KEY_ün ,0,key_help
- KEYTBL KEY_I ,0,key_toggle_past_header_tab
- KEYTBL KEY_Y ,1,key_insert_file
- KEYTBL KEY_Q ,0,key_toggle_text_mode
- KEYTBL KEY_üO ,1,key_search_forward_current_word
- KEYTBL KEY_ü_ ,1,key_search_backward_current_word
- KEYTBL KEY_BS ,0,key_toggle_buffering_mode
- KEYTBL KEY_CLR ,1,key_clear_buffer
- KEYTBL_END
- shift_key_table:
- KEYTBL KEY_ü^ ,1,key_search_backward
- KEYTBL KEY_F3 ,1,key_search_backward
- KEYTBL KEY_F4 ,1,key_search_backward_next
- KEYTBL KEY_N ,1,key_search_backward_next
- KEYTBL KEY_üD ,0,key_toggle_past_header_bracket
- KEYTBL KEY_7 ,1,key_jump_label
- KEYTBL_END
-
- .endif
-
- * âyü[âXâgâwâbâ_ò╧ìX
- key_toggle_past_header_tab:
- moveq #TAB,d0
- bra @f
- key_toggle_past_header_hyphen:
- moveq #'-',d0
- bra @f
- key_toggle_past_header_colon:
- moveq #':',d0
- bra @f
- key_toggle_past_header_bracket:
- move.b (default_past_header,pc),d0
- @@:
- lea (past_header,pc),a0
- cmp.b (a0),d0
- bne @f
- moveq #0,d0 è∙é╔É▌ÆΦé│éΩé─éóé╜éτĵéΦÅ┴é╡
- @@:
- move.b d0,(a0)
- bra display_system_status
-
- * â}ü[âN -------------------------------------- *
-
- .ifndef __EMACS
- key_mark_change_led:
- bchg #LED_INS,(LEDSTAT) * INS é╠ LED Å≤æ╘é≡ö╜ô]
- IOCS _LEDSET
- key_mark_dont_change_led:
- move.l (mark_char_adr,pc),d0
- beq key_set_mark
- clear_mark_and_redraw:
- bsr clear_mark
- bra draw_backscroll
- .endif
-
- clear_mark:
- lea (mark_char_adr,pc),a0
- clr.l (a0)+
- clr.l (a0)
- .ifdef __EMACS
- rts
- .else
- bclr #LED_INS,(LEDSTAT)
- bra call_iocs_ledset
- .endif
-
- key_set_mark:
- .ifdef __EMACS
- lea (set_mark_mes,pc),a1
- bsr print_message
- .endif
- key_set_mark_quiet:
- bsr get_cursor_line_buffer
- bpl @f
-
- movea.l (buffer_now,a6),a1 ;âoâbâtâ@é¬ï≤é╚éτâ_â~ü[é≡É▌ÆΦé╖éΘ
- @@:
- lea (mark_line_adr,pc),a0
- move.l a1,(a0)
- adda (cursorXbyte,pc),a1
- addq.l #1,a1
- EndChk2 a1
- move.l a1,-(a0) ;mark_char_adr
-
- .ifndef __EMACS
- bra draw_backscroll
-
- .else
- goto_mark_end:
- rts
-
- key_exchange_point_and_mark:
- move.l (mark_line_adr,pc),d1
- beq no_mark_error
- move.l (mark_char_adr,pc),d2
- bsr key_set_mark_quiet
- key_goto_mark_jump:
- movea.l d2,a1
- sub.l d1,d2
- subq #1,d2
- bsr search_zenkaku_check ;îàê╩Æu(d3)é╠Ä√ô╛é╠é▌
- bra search_found_scroll
-
- key_goto_mark:
- move.l (mark_line_adr,pc),d1
- beq no_mark_error
- move.l (mark_char_adr,pc),d2
- bra key_goto_mark_jump
-
- .endif
-
- * âoâbâNâXâNâìü[âïëµû╩ègæσüEÅkż -------------- *
-
- * ~DOWN : âoâbâNâìâOëµû╩é≡ë║é╔ìLé░é─êΩìsæ¥éΓé╖
- key_grow_window:
- move.b (bitflag,pc),d0 HELPMODE_bit
- bmi grow_window_end
-
- lea (down_line,pc),a4
- move (a4)+,d0 ë║é╔ê┌ô«é╡é╜ìsÉö
- add (window_line-(down_line+2),a4),d0
- cmpi #28,d0
- bcc grow_window_end
-
- lsl #2,d0 d0*4+(12-1) -> d0*4+(16-1)
- move.b d0,-(sp) * move.b d0,d1
- move (sp)+,d1 * lsl #8,d1
- move.b d0,d1
- addi #(12-1).shl.8+(16-1),d1
- moveq #(2+4),d0
- bsr rascpy_down
-
- addq #1,(a4) ;window_line
- bsr reset_line_address_buf
- lea (line_buf,pc),a3
-
- move (a4),d0
- bsr draw_line_d0
- lsl #2,d0
- tst.l (a3,d0.w)
- bmi key_move_window_up
- grow_window_end:
- shrink_window_end:
- rts
-
- * ~UP : âoâbâNâìâOëµû╩é≡Åπé╔ï╖é▀é─êΩìsî╕éτé╖
- key_shrink_window:
- move.b (bitflag,pc),d0 ;HELPMODE_bit
- bmi shrink_window_end
-
- lea (window_line,pc),a4
- move (a4),d0
- cmpi #4,d0
- bcs shrink_window_end
-
- lea (cursorY,pc),a1
- cmp (a1),d0
- bne shrink_window_cursor_fixed
-
- lea (line_buf,pc),a0 ;âJü[â\âïé¬ì┼ë║ìsé╔éáéΘÅΩìçé═
- lea (4,a0),a2 ;âXâNâìü[âïâAâbâvé╖éΘ
- subq #1,d0
- @@:
- move.l (a2)+,(a0)+
- dbra d0,@b
- subq #1,(a1) cursorY
- bsr rascpy_up_all
- shrink_window_cursor_fixed:
- lea (line_buf,pc),a3 ;âüâbâZü[âWò\Īìsé≡Åπé╔ê┌ô«é╖éΘ
- move (a4),d0
- subq #1,(a4) ;window_line
- lsl #2,d0
- st (a3,d0.w)
- move d0,d1
- addq #4,d1
- lsl #8,d1
- move.b d0,d1
- moveq #2+4,d0
- bsr rascpy_up
-
- bra clear_text_raster_mesline
-
- * âoâbâNâXâNâìü[âïâEâBâôâhâEé╠ê┌ô« ------------ *
-
- * ~ROLLDOWN : âoâbâNâìâOëµû╩é≡Åπé╔ê┌ô«é╖éΘ
- key_slide_window_up:
- lea (down_line,pc),a4
- move (a4)+,d1
- beq slide_window_up_end ;é▒éΩê╚Åπê┌ô«é┼é½é╚éó
-
- move #$fdfa,d1 ;@-2 -> @-2-4
- move (a4),d0 ;window_line
- addq #2+1,d0
- bsr rascpy_up_shl2
-
- lea (text_address,pc),a0
- subi.l #$800,(a0)+
- subi #$404,(a0)+
- subq #1,(a0)+
-
- bra clear_text_raster_mesline ;ê╚æOé╠ì┼ë║ìsé≡Å┴ïÄé╖éΘ
-
- * ~ROLLUP : âoâbâNâìâOëµû╩é≡ë║é╔ê┌ô«é╖éΘ
- key_slide_window_down:
- move (down_line,pc),d3
- move (window_line,pc),d0
- add d3,d0
- cmpi #28,d0
- bcc slide_window_down_end ;é▒éΩê╚Åπê┌ô«é┼é½é╚éó
-
- addq #3,d0
- lsl #2,d0
- subq #1,d0
- move.b d0,-(sp)
- move (sp)+,d1
- addq #4,d0
- move.b d0,d1
- move (window_line,pc),d0
- addq #3,d0
- lsl #2,d0 ;(ìsÉö+2)*4
- bsr rascpy_down
-
- moveq #0,d1
- move.b (text_ras_no,pc),d1
- subq #2,d1
- bsr clear_text_raster_m4 ;ê╚æOé╠ɵô¬ìsé≡Å┴ïÄé╖éΘ
-
- lea (text_address,pc),a0
- addi.l #$800,(a0)+
- addi #$404,(a0)+
- addq #1,(a0)+
- slide_window_up_end:
- slide_window_down_end:
- write_cancel:
- rts
-
- * --------------------------------------------- *
-
- * ^@ : âtâ@âCâïÅæé½Åoé╡
- key_write_file:
- lea (write_file_prompt,pc),a1
- bsr input_string
- beq write_cancel
- bsr unfold_home
- bsr check_diskready
- bmi disk_notready_error
-
- move #1<<ARCHIVE,-(sp)
- move.l a1,-(sp)
- DOS _NEWFILE
- addq.l #6,sp
- move.l d0,d4
- bpl write_file_status_check
-
- move #WOPEN,-(sp)
- move.l a1,-(sp)
- DOS _OPEN
- addq.l #6,sp
- move.l d0,d4
- bmi fileopen_error
-
- move #2,-(sp) Åæé½ì₧é▌âIü[âvâôé╡é╜ÅΩìçé═ûûö÷é╔âAâyâôâh
- clr.l -(sp)
- move d4,-(sp)
- DOS _SEEK
- addq.l #8,sp
- write_file_status_check:
- moveq #7,d1
- bsr is_file_io_enable
- bne filewrite_disable
-
- move.l (mark_char_adr,pc),d0
- bne write_file_mark_area
-
- moveq #0,d0
- moveq #0,d2
- movea.l (buffer_old,a6),a0 ;â}ü[âNé╚é╡é╠Ä₧é═ì┼Åëé⌐éτì┼îπé▄é┼
- addq.l #1,a0
- EndChk a0
- move.b (a0)+,d2
- EndChk a0
- movea.l (buffer_now,a6),a1
- tst.b (a1)+
- beq @f
-
- movea.l (buffer_write,a6),a1
- addq.l #2,a1 ëⁿìsÆ╝îπé┼é╚éóÅΩìçé═ï[ÄùôIé╚ăé╠ìsé≡æzÆΦé╖éΘ
- @@:
- bra write_file_loop_1
-
- write_file_mark_area:
- bsr get_mark_area
- beq close_filehandle_d4
- * d0 ăé╔ô]æùé╖éΘîàê╩Æu
- * d1 âoâbâtâ@Åæé½ì₧é▌âoâCâgÉö
- * d2 î╗ì▌ìsé╠îàÉö
- * a0 âoâbâtâ@Æìû┌ô_
- * a1 ÅIù╣âAâhâîâX
- write_file_loop_1:
- lea (io_buffer,pc),a2
- moveq #0,d1
- write_file_loop_2:
- cmp d0,d2
- bne @f
- addq.l #1,a0 ;ăé╠ìs
- EndChk a0
- moveq #0,d0
- moveq #0,d2
- move.b (a0)+,d2
- EndChk a0
- @@:
- cmpa.l a0,a1
- beq write_file_end
- move.b (a0)+,d3
- EndChk a0
- cmpi.b #CR,d3
- bne @f
- moveq #LF,d3
- @@:
- move.b d3,(a2)+
- addq #1,d0
- addq #1,d1
- cmpi #IOBUFSIZE,d1
- bne write_file_loop_2
- bsr write_file_sub
- bra write_file_loop_1
-
- write_file_end:
- tst d1
- beq @f
- bsr write_file_sub
- @@:
- .ifndef __EMACS
- bsr clear_mark_and_redraw
- .endif
- bra close_filehandle_d4
-
- write_file_sub:
- move.l d0,-(sp)
- move.l d1,-(sp)
- pea (io_buffer,pc)
- move d4,-(sp)
- DOS _WRITE
- lea (10,sp),sp
- move.l (sp)+,d0
- rts
-
- * Éïăîƒì⌡ ------------------------------------ *
-
- .ifdef __EMACS
-
- wait_vdisp_vsync:
- btst #4,(MFP_GPIP)
- beq wait_vdisp_vsync
- wait_vsync:
- btst #4,(MFP_GPIP)
- bne wait_vsync
- rts
-
- visual_bell:
- lea (2*(4+4)+TEXTPAL),a1
- move.l -(a1),-(sp) * öwîiÉFæ╥ö≡
- move.l -(a1),-(sp)
- move (2*(12-4),a1),d1 * ò╢ÄÜÉF
-
- bsr wait_vsync
- bsr set_text_palette
- subq.l #4*2,a1
-
- bsr wait_vdisp_vsync
-
- move.l (sp)+,(a1)+ * öwîiÉFò£ïA
- move.l (sp)+,(a1)+
- rts
-
- call_dos_keyctrl_md0:
- moveq #0,d0
- call_dos_keyctrl:
- move d0,-(sp) * 0/1
- DOS _KEYCTRL
- move d0,(sp)+
- rts
-
- .offset 0
- isch_strptr: .ds.l 1
- isch_direct: .ds.b 1 ;$00:forward $ff:backward
- isch_inpmod: .ds.b 1 ;$00:Æ╩Åφ $ff:C-q/C-vé╠Æ╝îπ
-
- isch_save_line: .ds.l 1 ;îƒì⌡èJÄnæOé╠âJü[â\âïê╩Æu
- isch_save_cx: .ds 1
- isch_save_cxb: .ds 1
- isch_save_cy: .ds 1
- sizeof_isch:
- .text
-
- * æOò√Éïăîƒì⌡
- key_isearch_forward:
- moveq #0,d0
- bra @f
- * îπò√Éïăîƒì⌡
- key_isearch_backward:
- move #$ff<<8,d0
- @@:
- move (cursorY,pc),-(sp)
- move.l (cursorX,pc),-(sp) ;cursorX/Xbyte
- move.l (line_buf,pc),-(sp)
-
- move d0,-(sp) ;isch_direct/inpmod
- clr.l -(sp) ;isch_strptr
-
- * ì─ÆΦï`ë┬ö\é╚âLü[é╠ôαùeé≡ò╧ìXé╖éΘ
- pea (fnckey_buf,pc)
- clr -(sp) Ä√ô╛
- DOS _FNCKEY
- addq.l #6,sp
-
- lea (ise_fnc_tbl,pc),a0
- bra isearch_setfnc
- isearch_setfnc_loop:
- move.l a0,-(sp)
- move d0,-(sp)
- DOS _FNCKEY
- addq.l #6,sp
- @@:
- tst.b (a0)+
- bne @b
- isearch_setfnc:
- move #$01_00,d0 É▌ÆΦ
- move.b (a0)+,d0
- bne isearch_setfnc_loop
-
- .if 0
- bsr gm_inactive
- .endif
- bsr fep_enable
-
- * general_work: .dc.b 'isearch ['
- * .dc.b æOë±îƒì⌡ò╢ÄÜù±
- * .dc.b ']:'
- * (isch_strptr,sp) ->
- * .dc.b îƒì⌡ò╢ÄÜù±
-
- lea (general_work,pc),a1
- clr.l (search_char_adr-general_work,a1)
- lea (isearch_mes_1,pc),a0 ;"isearch ["
- bsr str_copy
- lea (isearch_string_buf,pc),a0
- bsr str_copy
- lea (isearch_mes_2,pc),a0 ;"]:"
- bsr str_copy
- move.l a1,(isch_strptr,sp) ;îƒì⌡ò╢ÄÜù±âoâbâtâ@é╠âAâhâîâX
-
- isearch_redraw_loop:
- lea (general_work,pc),a1
- bsr print_message
- bra isearch_loop
- isearch_bell:
- bsr visual_bell
- isearch_loop:
- bsr blink_cursor
- moveq #1,d0
- bsr call_dos_keyctrl
- beq isearch_loop
- bsr call_dos_keyctrl_md0
- beq isearch_loop öOé╠ê╫
-
- bsr clear_cursor
- *** ɺîΣïLìåé╠îƒì╕ ***
- move.b d0,d1
- addq.b #1,d1
- beq isearch_fnckey âJü[â\âïôÖé╛é┴é╜ÅΩìç(C-qéµéΦɵé╔î⌐éΘ)
-
- tst.b (isch_inpmod,sp)
- bne isearch_next_char C-q,C-vé╠Æ╝îπ
-
- lea (isearch_table,pc),a0
- @@:
- move (a0)+,d1
- beq @f
- cmp (a0)+,d0
- bne @b
- adda d1,a0
- jmp (a0)
- @@:
- cmpi #$20,d0 âoâCâôâhé│éΩé─éóé╚éóɺîΣïLìåé¬ôⁿù═é│éΩé╜
- bcs isearch_exit Ä₧é═Éïăîƒì⌡é⌐éτö▓é»é─ò]ë┐é╖éΘ
- isearch_next_char:
- clr.b (isch_inpmod,sp)
- movea.l (isch_strptr,sp),a0
- bsr get_isearch_strlen
-
- lea (ctype_table,pc),a2
- tst.b (a2,d0.w) MULTIBYTE
- bmi isearch_mb
- * isearch_single_byte_code:
- tst.b d0
- bmi isearch_sb ö╝èpò╨ë╝û╝
- KEYbtst KEY_XF3
- beq isearch_sb
- cmpi.b #$40,d0
- bmi @f
- andi.b #$1f,d0
- @@:
- bra isearch_exit Meta+??
- isearch_mb:
- lsl #8,d0
- move d0,-(sp)
- bsr call_dos_keyctrl_md0 2byteû┌é≡ĵéΦÅ£é¡
- or (sp)+,d0 High/Low
- isearch_mb_2:
- cmpi #GETSMAX-1,d1
- bcc isearch_bell
-
- move d0,-(sp) Åπê╩âoâCâg
- move.b (sp)+,(a0)+
- tst.b d0
- bne isearch_sb_2
-
- clr.b -(a0) $??_00é═û│Äï
- bra isearch_loop
- isearch_sb:
- cmpi #GETSMAX,d1
- bcc isearch_bell
- isearch_sb_2:
- move.b d0,(a0)+ ë║ê╩âoâCâg
- clr.b (a0)
-
- bsr print_message_cont
- isearch_search_next0:
- lea (bitflag,pc),a1 ;ìíôxé╠îƒì⌡é═âJü[â\âïê╩ÆuÄßé╡é¡é═
- bset #ISEARCH_bit,(a1) ;î⌐é┬é⌐é┴é╜ò╢ÄÜù±é╠ɵô¬é⌐éτèJÄné╖éΘ
- isearch_search_next:
- movea.l (isch_strptr,sp),a1
- tst.b (a1)
- bne @f
- lea (isearch_string_buf,pc),a1
- @@:
- bsr make_search_work_a1
- beq isearch_loop ;îƒì⌡ò╢ÄÜù±é¬ï≤
- tst.b (isch_direct,sp)
- bne isearch_search_backward
-
- bsr i_search_forward_main
- bra @f
- isearch_search_backward:
- bsr i_search_backward_main
- @@:
- bmi isearch_bell ;îƒì⌡Ä╕ös
- bra isearch_loop
-
- ;öCê╙É▌ÆΦé¬ë┬ö\é╚âLü[é╠Åêù¥
- isearch_fnckey:
- bsr call_dos_keyctrl_md0
- beq isearch_loop
- cmpi #11,d0
- bhi isearch_loop
- add d0,d0
-
- move.b (SFTSTAT),d1
- KEYbtst KEY_XF3
- beq @f
-
- lea (key_slide_window_down,pc),a0
- subq #4,d0 ;2/4é╠é▌bindé│éΩé─éóéΘ
- bhi isearch_loop
- bmi isearch_fnckey_jump
- lea (key_slide_window_up,pc),a0
- bra isearch_fnckey_jump
- @@:
- lea (isearch_fnckey_normal,pc),a0
- bclr #SFT_CTRL,d1
- beq @f
- lea (isearch_fnckey_ctrl,pc),a0
- @@:
- move (-2,a0,d0.w),d0
- beq isearch_loop
- adda d0,a0
- isearch_fnckey_jump:
- tst.b d1
- bne isearch_loop
- isearch_fnckey_exit:
- movea.l (isch_strptr,sp),a1
- lea (sizeof_isch,sp),sp
- move.l a0,-(sp)
- bra isearch_end
-
- isearch_fnckey_normal:
- @@: .dc key_scroll_up-@b ROLL UP
- .dc key_scroll_down-@b ROLL DOWN
- .dc key_kill_region-@b DEL
- .dc key_previous_line-@b ü¬
- .dc key_backward_char-@b ü⌐
- .dc key_forward_char-@b ü¿
- .dc key_next_line-@b ü½
- .dc 0 CLR
- .dc key_help-@b HELP
- .dc key_kill_condrv-@b HOME
- .dc key_kill_condrv-@b UNDO
-
- isearch_fnckey_ctrl:
- @@: .dc key_end_of_buffer_mark-@b ROLL UP
- .dc key_beginning_of_buffer_mark-@b ROLL DOWN
- .dc 0 DEL
- .dc key_shrink_window-@b ü¬
- .dc key_move_window_up-@b ü⌐
- .dc key_move_window_down-@b ü¿
- .dc key_grow_window-@b ü½
- .dc key_clear_buffer-@b CLR
- .dc 0 HELP
- .dc 0 HOME
- .dc key_suspend_condrv-@b UNDO
-
- ISETBL: .macro address,char
- .dc address-($+4),CTRL+char
- .endm
-
- isearch_table:
- ISETBL isearch_next_char ,'I' * TAB
- ISETBL isearch_next_char ,'M' * CR
- ISETBL isearch_lf ,'J' * LF(-> CR)
-
- ISETBL isearch_meta_end ,'[' * ESC
- ISETBL isearch_ctrl_g_end ,'G'
- ISETBL isearch_ctrl_s ,'S'
- ISETBL isearch_ctrl_r ,'R'
- ISETBL isearch_backspace_b ,'B'
- ISETBL isearch_backspace_h ,'H'
- ISETBL isearch_ctrl_f ,'F'
- ISETBL isearch_input_ctrlcode ,'V'
- ISETBL isearch_input_ctrlcode ,'Q'
- .dc 0
-
- isearch_lf:
- moveq #CR,d0 ëⁿìsé╞î⌐é╚é╖
- bra isearch_next_char
-
- isearch_ctrl_s:
- moveq #0,d0
- bra @f
- isearch_ctrl_r:
- moveq #-1,d0
- @@: cmp.b (isch_direct,sp),d0
- beq isearch_search_next ;ă/æOé╠ò╢ÄÜé⌐éτîƒì⌡
- move.b d0,(isch_direct,sp)
- bra isearch_search_next0 ;îƒì⌡ò╢ÄÜù±é╠ûûö÷/ɵô¬é╔ê┌ô«
-
- isearch_input_ctrlcode:
- st (isch_inpmod,sp)
- bra isearch_loop
-
- isearch_backspace_h:
- SFTbtst SFT_CTRL
- beq @f
- KEYbtst KEY_H
- bne @f
- KEYbtst KEY_BS
- lea (key_toggle_buffering_mode,pc),a0
- bne isearch_fnckey_exit ;C-bs
- @@:
- isearch_backspace_b:
- movea.l (isch_strptr,sp),a0
- moveq #0,d0
- move.b (a0)+,d0
- beq isearch_loop îƒì⌡ò╢ÄÜù±é═ï≤
-
- lea (ctype_table,pc),a1
- @@:
- tst.b (a1,d0.w) MULTIBYTE
- smi d1
- ext d1 ö╝èp=$0000,æSèp=$ffff
- suba d1,a0 æSèpé╚éτ1byteÉié▀éΘ
- move.b (a0)+,d0
- bne @b
-
- clr.b (-2,a0,d1.w) ì┼îπé╠ò╢ÄÜé≡Å┴é╖
- bsr clear_message
- bra isearch_redraw_loop
-
- isearch_ctrl_f:
- movea.l (isch_strptr,sp),a0
- tst.b (a0) ;îƒì⌡ò╢ÄÜù±é¬é▄é╛ôⁿù═é│éΩé─éóé╚éóé╚éτ
- beq pickup_char_cur ;âJü[â\âïê╩Æué⌐éτÄ√ô╛
- move.l (search_char_adr,pc),d0
- beq isearch_bell ;îƒì⌡Ä╕ösÄ₧é═ĵéΦì₧é▀é╚éó
-
- move (search_xbyte,pc),d2 ;îƒì⌡ɼî≈Ä₧é═î⌐é┬é⌐é┴é╜
- move (search_x,pc),d3 ;ò╢ÄÜù±é╠ûûö÷é⌐éτĵéΦì₧é▐
- movea.l d0,a1
- suba d2,a1
- subq.l #1,a1
- TopChk a1
- moveq #0,d1
- move.b (a1),d1 ;ìsé╠âoâCâgÉö
-
- movea.l d0,a1
- lea (case_table,pc),a2
- pickup_char_loop:
- bsr get_char
- moveq #0,d4
- move.b (a0)+,d4
- beq pickup_char_exec
- tst d0
- bmi pickup_char_cmp_mb
-
- move.b (a2,d4.w),d4 -x âIâvâVâçâôé╔éµé┴é─é═æσò╢ÄÜżò╢ÄÜé≡
- cmp.b (a2,d0.w),d4 ô»êΩÄïé╡é─öΣèré╖éΘ
- bra @f
- pickup_char_cmp_mb:
- lsl #8,d4 2bytesò╢ÄÜ
- move.b (a0)+,d4
- cmp d0,d4 ;1998/02/28 é▒é╠öΣèré═òsùvé╔é╚é┴é╜é╞
- @@: bne isearch_bell ;Ävéñé¬üAêΩë₧Äcé╡é─é¿é¡
- cmp d1,d2
- bne pickup_char_loop
-
- addq.l #1,a1
- EndChk a1
- move.b (a1)+,d1 ;ìsé╠âoâCâgÉö
- EndChk a1
- moveq #0,d2 ;cursorX
- moveq #0,d3 ;cursorXbyte
- bra pickup_char_loop
-
- pickup_char_cur:
- lea (line_buf,pc),a1
- movem (cursorX,pc),d2/d3/d4
- lsl #2,d4 ;cursorY
- movea.l (a1,d4.w),a1
- moveq #0,d1
- move.b (a1)+,d1 ;Æìû┌ìsé╠ò╢ÄÜÉö
- adda d3,a1
- EndChk a1
- bsr get_char
- tst d0
- beq isearch_bell
- pickup_char_exec:
- movea.l (isch_strptr,sp),a0
- bsr get_isearch_strlen
- tst d0
- bmi isearch_mb_2
- bne isearch_sb
- *isearch_ctrl_f_end:
- bra isearch_loop
-
- * îƒì⌡ò╢ÄÜù±é╠èeÄφÅεò±é≡ô╛éΘ
- * in a0.l ò╢ÄÜù±
- * out d1.l ò╢ÄÜÉö
- * a0.l ò╢ÄÜù±ûûö÷(NUL)
- * a1.l üV(print_message_contùp)
-
- get_isearch_strlen:
- move.l a0,-(sp)
- @@: tst.b (a0)+
- bne @b
- subq.l #1,a0
- move.l a0,d1
- sub.l (sp)+,d1
- lea (a0),a1
- rts
-
- isearch_exit:
- movea.l (isch_strptr,sp),a1
- lea (sizeof_isch,sp),sp
-
- lea (ctrl2scan_table,pc),a0
- move.b (a0,d0.w),-(sp)
- pea (keyinp_direct,pc)
- bra isearch_end
-
- isearch_ctrl_g_end:
- movea.l (isch_save_line,sp),a0
- bsr reset_line_address_buf_2
-
- lea (cursorX,pc),a0
- move.l (isch_save_cx,sp),(a0)+ ;cusorX/Xbyte
- move (isch_save_cy,sp),(a0) ;cusorY
- bsr draw_backscroll
- isearch_meta_end:
- movea.l (isch_strptr,sp),a1
- lea (sizeof_isch,sp),sp
- bra isearch_end
-
- isearch_end:
- tst.b (a1) îƒì⌡ò╢ÄÜù±é≡ò█æ╢é╖éΘ
- beq isearch_skip_save_str
- lea (isearch_string_buf,pc),a0
- @@: move.b (a1)+,(a0)+
- bne @b
- isearch_skip_save_str:
-
- * ì─ÆΦï`ë┬ö\é╚âLü[é╠ôαùeé≡û▀é╖
- pea (fnckey_buf,pc)
- move #$01_00,-(sp) É▌ÆΦ
- DOS _FNCKEY
- addq.l #6,sp
-
- bsr fep_disable
- .if 0
- bsr gm_active
- .endif
- bsr clear_cursor
- bra clear_message
-
- .endif
-
- * îƒì⌡ ---------------------------------------- *
-
- * C-^
- key_search_forward_current_word:
- bsr readline_yank_current_word
- bra key_search_forward
- * ü½îƒì⌡ü^ăîƒì⌡
- key_search_forward:
- lea (search_forward_mes,pc),a1
- bsr input_string
- beq search_forward_end
- bsr copy_search_str
- key_search_forward_next:
- bsr make_search_work
- beq search_forward_end
- lea (searching_mes,pc),a1
- bsr print_message
- bsr search_forward_main
- search_found_or_not:
- lea (not_found_mes,pc),a1
- bmi print_message
- bra clear_message
-
- readline_yank_current_word:
- bsr get_cursor_line_buffer
- bmi key_kill_condrv
-
- moveq #GETSMAX,d2
- lea (RL_PASTBUF,pc),a2
- bsr yank_current_word_sub
- lea (RL_PASTBUF,pc),a0
- move.l a0,(past_pointer-RL_PASTBUF,a0)
- search_forward_end:
- rts
-
- * ö─ùpâoâbâtâ@é⌐éτîƒì⌡ò╢ÄÜù±ùpâoâbâtâ@é╔æ╥ö≡é╡é─é¿é¡
- copy_search_str:
- lea (search_string_buf,pc),a0
- @@: move.b (a1)+,(a0)+
- bne @b
- rts
-
- * in a1.l îƒì⌡ò╢ÄÜù±
- * out d7.l ì┼Åëé╠1âoâCâg(2âoâCâgò╢ÄÜé╠ÅΩìçé═Åπê╩âoâCâgé╠é▌)
- * a0.l case_table
- * a3.l line_buf
- * a5.l (a5): îƒì⌡ò╢ÄÜù±
- * (GETSMAX+1,a5): è┐ÄÜîƒì╕âeü[âuâï
- KANJITBL .equ ctype_table-search_string
-
- make_search_work:
- lea (search_string_buf,pc),a1
- make_search_work_a1:
- lea (case_table,pc),a0
- lea (line_buf,pc),a3
- moveq #0,d0
- moveq #0,d7
- lea (search_string,pc),a5
- lea (a5),a2
-
- move.b (a1)+,d7 ì┼Åëé╠éPò╢ÄÜ
- beq make_search_work_end
- move.b (a0,d7.w),d7 éáéτé⌐é╢é▀æσò╢ÄÜë╗é╡é─é¿é¡
- tst.b (KANJITBL,a5,d7.w)
- bmi make_search_str_mb_low
-
- @@: move.b (a1)+,d0
- tst.b (KANJITBL,a5,d0.w)
- bmi make_search_str_mb_high
- move.b (a0,d0.w),(a2)+
- make_search_str_next:
- bne @b
- @@: moveq #1,d0
- make_search_work_end:
- rts
-
- make_search_str_mb_high:
- move.b d0,(a2)+
- beq @b
- make_search_str_mb_low:
- move.b (a1)+,(a2)+ ë║ê╩âoâCâg(æσò╢ÄÜë╗é╡é╚éó)
- bra make_search_str_next
-
- * ü½îƒì⌡âüâCâôÅêù¥
- * in d7.l ì┼Åëé╠1âoâCâg(2âoâCâgò╢ÄÜé╠ÅΩìçé═Åπê╩âoâCâgé╠é▌)
- * a0.l case_table
- * a3.l line_buf
- * a5.l (a5): îƒì⌡ò╢ÄÜù±
- * (GETSMAX+1,a5): è┐ÄÜîƒì╕âeü[âuâï
- * out d0.l 0:îƒì⌡ɼî≈ -1:Ä╕ös
- * ö⌡ìl:
- * i_search_forward_mainé┼é═
- * ɼî≈é╖éΩé╬search_char_adrüAsearch_xüAsearch_xbyteé¬âZâbâgé│éΩéΘ.
- * Ä╕ösé╖éΩé╬search_char_adré¬âNâèâAé│éΩéΘ.
-
- i_search_forward_main:
- not.l d7 ;Åπê╩âÅü[âhé¬òëé╚éτÉïăîƒì⌡âéü[âh
- not d7
- bsr get_isearch_start
- bne @f
- search_forward_main:
- bsr search_sub_getcur
- bmi search_not_found
- @@:
- .ifdef __EOBCUR
- tst.b (a1)
- beq search_not_found
- .endif
-
- .ifdef __EMACS
- bclr #ISEARCH_bit,(bitflag-case_table,a0)
- beq @f
-
- subq.l #1,a1
- subq #1,d2
- @@:
- .endif
- search_forward_skip_lowbyte:
- moveq #0,d3
- search_forward_not_match:
- addq.l #1,a1 ;ăé╠ò╢ÄÜé⌐éτÆ▓é╫éΘ
- EndChk a1
- addq #1,d2
- cmp d1,d2 ;îàÉö
- bne search_forward_char
-
- tst.b (a1)+
- beq search_not_found ;âoâbâtâ@ûûé▄é┼î⌐é┬é⌐éτé╚é⌐é┴é╜
- EndChk a1
- moveq #0,d2
- moveq #0,d1
- move.b (a1)+,d1 ;îàÉö
- beq search_not_found
- EndChk a1
- search_forward_char:
- tst.b (KANJITBL,a5,d3.w) é│é┴é½öΣèré╡é╜é╠é¬æSèpé╚éτë║ê╩âoâCâgé≡ö≥é╬é╖
- bmi search_forward_skip_lowbyte
-
- move.b (a1),d3
- cmp.b (a0,d3.w),d7
- bne search_forward_not_match
- bsr search_sub
- bne search_forward_not_match Æìû┌ê╩Æué⌐éτé═êΩÆvé╡é╚éó
-
- bsr search_zenkaku_check ;îàê╩Æu(d3)é╠Ä√ô╛é╠é▌
- lea (search_char_adr,pc),a2
- move.l a1,(a2)+ ;search_char_adr
- move d3,(a2)+ ;search_x
- move d2,(a2)+ ;search_xbyte
-
- ;i-searché╚éτâJü[â\âïé═îƒì⌡ò╢ÄÜù±é╠ûûö÷é╔ê┌ô«é╖éΘ
- tst.l d7
- bpl isearch_move_skip
-
- lea (-1,a1),a2
- suba d2,a2
- TopChk a2
- move.b (a2),d1 ;ìsé╠âoâCâgÉö
- isearch_move_loop:
- bsr get_char ;êΩò╢ÄÜò¬âJü[â\âïé≡Éié▀éΘ
- cmp d1,d2
- bne @f
-
- addq.l #1,a1
- EndChk a1
- move.b (a1)+,d1 ;ìsé╠âoâCâgÉö
- EndChk a1
- moveq #0,d2 ;cursorXbyte
- moveq #0,d3 ;cursorX
- @@:
- tst d0
- bpl @f
- addq.l #1,a5 ;2âoâCâgò╢ÄÜ
- @@: tst.b (a5)+
- bne isearch_move_loop ;îƒì⌡ò╢ÄÜù±é╠ûûö÷é▄é┼ê┌ô«é╖éΘ
- isearch_move_skip:
-
- search_found_scroll:
- subq.l #1,a1
- suba d2,a1
- TopChk a1
- jump_scroll:
- lea (line_buf,pc),a3
- movea.l (a3),a0
- move (window_line,pc),d0
- @@:
- tst.b (a3) ;é▒é╠â`âFâbâNé═ redraw-window é┼òKùv
- bmi @f ;é╗éñé┼é╚éóÅΩìçéαöOé╠ê╫
- cmpa.l (a3)+,a1
- dbeq d0,@b
- beq jump_scroll_same_page î⌐é┬é»é╜ìsé¬î╗ì▌ò\ĪÆåé╚éτâXâNâìü[âïé╡é╚éó
- @@:
- movea.l a1,a0 î⌐é┬é»é╜ìsé≡ì┼ÅπÆié╔ò\Ī
-
- .if 1
- move (window_line,pc),d1 ;âZâôâ^âèâôâO
- lsr #1,d1
- subq #1,d1 ;ò\ĪìsÉöé╠ö╝ò¬é╛é»ë║é╔é╕éτé╖
- moveq #0,d0
- jump_scroll_center_loop:
- lea (-1,a0),a3
- TopChk a3
- move.b (a3),d0
- beq jump_scroll_center_loop_end
- suba d0,a0 ;æOé╠ìsé╔ê┌ô«
- subq.l #1+1,a0
- TopChk a0
- dbra d1,jump_scroll_center_loop
- jump_scroll_center_loop_end:
- .endif
-
- PUSH d2/a1
- bsr reset_line_address_buf_2
- tst d1
- bmi @f ò\Īìsò¬é╛é»âfü[â^é¬éáéΘ(ûûö÷é┼é═é╚éó)
- bsr end_of_buffer_sub
- @@:
- POP d2/a1
- moveq #-1,d1
- lea (line_buf,pc),a3
- @@:
- addq #1,d1 ;î⌐é┬é»é╜ìsé╠ò\Īé═ë╜ìsû┌é⌐üH
- cmpa.l (a3)+,a1 ;(âoâbâtâ@ûûö÷é≡ò\Īé╡é╜Ä₧ê╚èOé═ 0)
- bne @b
-
- st d0 ;ì─ò`ëµ òKùv
- bra @f
- jump_scroll_same_page:
- move (window_line,pc),d1
- sub d0,d1
- sf d0 ;ì─ò`ëµ òsùv
- @@:
- lea (cursorX,pc),a0
- move d3,(a0)+ ;cursorX
- move d2,(a0)+ ;cursorXbyte
- move d1,(a0) ;cursorY
- tst.b d0
- beq @f
- bsr draw_backscroll
- @@: moveq #0,d0
- rts
-
- get_isearch_start:
- lea (search_char_adr,pc),a2
- move.l (a2),a1 ;search_char_adr
- clr.l (a2)+
- move (a2)+,d3 ;search_x
- move (a2)+,d2 ;search_xbyte
-
- moveq #0,d1
- lea (-1,a1),a2
- suba d2,a2
- TopChk a2
- move.b (a2),d1
-
- move.l a1,d0 ;tst.l a1
- rts
-
- search_sub_getcur:
- bsr get_cursor_line_buffer
- bmi search_sub_getcur_end
-
- move (cursorXbyte,pc),d2
- moveq #0,d1
- move.b (a1)+,d1 ;âoâCâgÉö
- adda d2,a1
- EndChk2 a1
-
- tst d2 ;not minus
- search_sub_getcur_end:
- search_backward_end:
- rts
-
- * C-\
- key_search_backward_current_word:
- bsr readline_yank_current_word
- bra key_search_backward
- * ü¬îƒì⌡ü^ăîƒì⌡
- key_search_backward:
- lea (search_backward_mes,pc),a1
- bsr input_string
- beq search_backward_end
- bsr copy_search_str
- key_search_backward_next:
- bsr make_search_work
- beq search_backward_end
- lea (searching_mes,pc),a1
- bsr print_message
- bsr search_backward_main
- bra search_found_or_not
-
- * ü¬îƒì⌡âüâCâôÅêù¥
- * in d7.l ì┼Åëé╠1âoâCâg(2âoâCâgò╢ÄÜé╠ÅΩìçé═Åπê╩âoâCâgé╠é▌)
- * a0.l case_table
- * a3.l line_buf
- * a5.l (a5): îƒì⌡ò╢ÄÜù±
- * (GETSMAX+1,a5): è┐ÄÜîƒì╕âeü[âuâï
- * out d0.l 0:îƒì⌡ɼî≈ -1:Ä╕ös
- * ö⌡ìl:
- * i_search_backward_mainé┼é═
- * ɼî≈é╖éΩé╬search_char_adrüAsearch_xüAsearch_xbyteé¬âZâbâgé│éΩéΘ.
- * Ä╕ösé╖éΩé╬search_char_adré¬âNâèâAé│éΩéΘ.
-
- i_search_backward_main:
- bsr get_isearch_start
- bne @f
- search_backward_main:
- bsr search_sub_getcur
- bmi search_not_found
- @@:
- .ifdef __EMACS
- bclr #ISEARCH_bit,(bitflag-case_table,a0)
- beq @f
-
- addq.l #1,a1 ;îπé┼1ü`2é≡ê°é¡é╠é┼Åπî└îƒì╕é═òsùv
- addq #1,d2
- @@:
- .endif
- moveq #0,d3
- search_backward_not_match:
- subq.b #1,d2
- bpl search_backward_cmp
-
- subq.l #2,a1 ;ìsé╠ɵô¬é▄é┼æké┴é╜ÅΩìç
- TopChk a1
- move.b (a1),d1
- move.b d1,d2 æOé╠ìsé╠ëEÆ[é⌐éτ
- bne search_backward_not_match
- search_not_found:
- moveq #-1,d0
- rts
- search_backward_cmp:
- subq.l #1,a1
- TopChk a1
-
- move.b (a1),d3
- cmp.b (a0,d3.w),d7
- bne search_backward_not_match
- bsr search_sub
- bne search_backward_not_match
-
- bsr search_zenkaku_check êΩÆvò╢ÄÜù±é¬æSèpé╠ôrÆåé⌐éτé⌐Æ▓é╫éΘ
- bcs search_backward_not_match
-
- lea (search_char_adr,pc),a2
- move.l a1,(a2)+ ;search_char_adr
- move d1,(a2)+ ;search_x
- move d2,(a2)+ ;search_xbyte
- bra search_found_scroll
-
- search_zenkaku_check:
- usereg .reg d1-d2/a1
- PUSH usereg
- suba d2,a1
- TopChk a1
- move d2,d1
- moveq #0,d2
- moveq #0,d3
- bra @f
- zenkaku_check_loop:
- bsr get_char
- @@: cmp d2,d1
- bhi zenkaku_check_loop
- POP usereg
- rts
-
- * îƒì⌡âTâu(2ò╢ÄÜû┌ê╚ì~é≡öΣèré╖éΘ)
- search_sub:
- usereg .reg d1-d4/a1-a2/a5
- PUSH usereg
- lea (a5),a2
- moveq #0,d0
- search_sub_loop:
- move d3,d4 æOé╠öΣèrò╢ÄÜ
- move.b (a5)+,d3
- beq search_sub_found
- addq.l #1,a1
- EndChk a1
- addq #1,d2
- cmp d1,d2
- bne search_sub_cmpchar
-
- tst.b (a1)+
- beq search_sub_not_found
- EndChk a1
- moveq #0,d2
- moveq #0,d1
- move.b (a1)+,d1
- beq search_sub_not_found
- EndChk a1
- search_sub_cmpchar:
- move.b (a1),d0
- tst.b (KANJITBL,a2,d4.w)
- bmi @f
- move.b (a0,d0.w),d0
- @@: cmp.b d0,d3
- beq search_sub_loop
- search_sub_not_found:
- moveq #-1,d0
- search_sub_found:
- POP usereg
- rts
-
- * ÅIù╣ ---------------------------------------- *
-
- * OPT.1 + UNDO : ëµû╩é≡Äcé╡é╜é▄é▄ÅIù╣
- key_suspend_condrv:
- lea (bitflag,pc),a0
- tst.b (a0) HELPMODE_bit
- bmi key_kill_condrv âwâïâvâéü[âhé╚éτö▓é»éΘé╛é»
- bset #SUSPEND_bit,(a0)
- key_kill_condrv:
- addq.l #4,sp
- rts
-
- * âJü[â\âïìsé╠âoâbâtâ@âAâhâîâXé≡ïüé▀éΘ -------- *
- * out a1.l âAâhâîâX
- * a3.l line_buf
- * ccr N 0:OK 1:error
-
- get_cursor_line_buffer:
- movea.l d0,a1
- lea (line_buf,pc),a3
- move (cursorY,pc),d0
- lsl #2,d0
- move.l (a3,d0.w),d0
- exg d0,a1
- rts
-
- * âJâbâgüòâyü[âXâg ---------------------------- *
-
- .ifdef __EMACS ;+07b
- key_yank_region:
- move.l (mark_char_adr,pc),d0
- bne @f
- no_mark_error:
- bsr visual_bell ;â}ü[âNé¬é╚éóé╚éτâGâëü[
- lea (no_mark_err_mes,pc),a1
- bra print_message
- @@:
- .else
- key_yank:
- move.l (mark_char_adr,pc),d0 ;â}ü[âNé│éΩé─éóé╚é»éΩé╬
- beq key_yank_current_word ;âJü[â\âïê╩Æué╠ÆPîΩé≡âyü[âXâg
- .endif
-
- bsr get_mark_area
- beq key_kill_condrv
-
- bsr kill_region_start
- yank_and_kill_condrv:
- addq.l #4,sp
- yank_sub:
- lea (bitflag,pc),a0
- bset #AFTERCR_bit,(a0) ëⁿìsÆ╝îπâtâëâOé≡ùºé─é─âyü[âXâgê╩Æué≡ɵô¬é╔é╖éΘ
- move.l (pastbuf_adr,pc),(past_pointer-bitflag,a0)
- rts
-
- key_yank_current_word:
- bsr get_cursor_line_buffer
- bmi key_kill_condrv
-
- movem.l (pastbuf_size,pc),d2/a2
- * movea.l (pastbuf_adr,pc),a2
- bsr yank_current_word_sub
- bra yank_and_kill_condrv
-
- yank_current_word_sub:
- moveq #0,d3
- move.b (a1)+,d3
- move (cursorXbyte,pc),d1
- adda d1,a1
- EndChk2 a1
- bra @f
- yank_current_word_loop:
- cmp d1,d3
- beq yank_current_word_endofline
- yank_current_word_nextline:
- move.b (a1)+,d0
- cmpi.b #$20,d0
- bls yank_current_word_end
- EndChk a1
- move.b d0,(a2)+
- addq #1,d1
- @@:
- subq.l #1,d2
- bne yank_current_word_loop
- yank_current_word_end:
- bra set_nulstr_yankptr
-
- yank_current_word_endofline:
- tst.b (a1)+
- beq yank_current_word_end
- EndChk a1
- move.b (a1)+,d3
- beq yank_current_word_end
- EndChk a1
- moveq #0,d1
- bra yank_current_word_nextline
-
- * âèü[âWâçâôé╠âAâhâîâXé≡ô╛éΘ ------------------ *
- * out d0.w/d1.w æOÆ[üEîπÆ[é╠îàê╩Æu(âoâCâgÆPê╩)
- * d2.w/d3.w üV ìsâoâCâgÉö
- * a0.l/a1.l üV ò╢ÄÜâAâhâîâX
- * ccrZ 0:OK 1:ö═ê═é¬û│î°
-
- get_mark_area:
- move.l (mark_char_adr,pc),d1
- beq get_mark_area_end
-
- movea.l (mark_line_adr,pc),a0
- moveq #0,d0
- moveq #0,d2
- move.b (a0)+,d2 d2.w=â}ü[âNìsé╠îàÉö
- bra @f
- 1:
- addq #1,d0 d0.w=markXbyte
- addq.l #1,a0 a0.l=â}ü[âNê╩Æu
- @@:
- EndChk a0
- cmpa.l d1,a0
- bne 1b
-
- bsr get_cursor_line_buffer
- bpl @f
-
- moveq #0,d0
- bra get_mark_area_end
- @@:
- moveq #0,d3
- move.b (a1)+,d3 d3.w=âJü[â\âïê╩Æué╠îà
-
- move (cursorXbyte,pc),d1
- adda d1,a1 a1.l=âJü[â\âïê╩Æu
- EndChk2 a1
- cmpa.l a0,a1
- bcc @f
- exg d0,d1 a0.l:èJÄn<a1.l:ÅIù╣é╔é╖éΘ
- exg d2,d3
- exg a0,a1
- @@:
- cmpa.l (buffer_old,a6),a0
- bcc @f
- cmpa.l (buffer_old,a6),a1
- bcs @f
- exg d0,d1 a1.l<=old<a0.lé╚éτî≡è╖
- exg d2,d3
- exg a0,a1
- @@:
- cmpa.l a0,a1 ;equalé╚éτcursor==mark
- get_mark_area_end:
- kill_region_end:
- rts
-
- .ifdef __EMACS
- key_kill_region:
- bsr get_mark_area
- beq no_mark_error
- addq.l #4,sp ;âJâbâgâoâbâtâ@é╔ô]æùé╡é─ÅIù╣
- bra kill_region_start
- key_copy_region:
- bsr get_mark_area
- beq no_mark_error
- bra kill_region_start
-
- .else
- key_kill_region:
- addq.l #4,sp
- key_copy_region:
- bsr get_mark_area
- beq kill_region_end ;â}ü[âNö═ê═é═û│î°
- bra kill_region_start
- .endif
-
- kill_region_start:
- movem.l (pastbuf_size,pc),d1/a2
- * movea.l (pastbuf_adr,pc),a2
- subq.l #1,d1
- kill_region_loop:
- cmp d0,d2
- bne @f
- moveq #0,d0 ăé╠ìs
- addq.l #1,a0
- EndChk a0
- move.b (a0)+,d2
- EndChk a0
- @@:
- cmpa.l a0,a1
- beq @f
- move.b (a0)+,(a2)+
- EndChk a0
- addq #1,d0
- subq.l #1,d1
- bne kill_region_loop
- @@:
- bra set_nulstr_yankptr
-
- * U : âJü[â\âïü`ò╢ô¬âyü[âXâg
- key_yank_from_beginning_of_line:
- pea (yank_and_kill_condrv,pc)
- bra kill_from_beginning_of_line_sub
-
- * ^U : âJü[â\âïü`ò╢ô¬âJâbâg
- key_kill_from_beginning_of_line:
- pea (key_kill_condrv,pc)
- bra kill_from_beginning_of_line_sub
-
- kill_from_beginning_of_line_sub:
- bsr get_cursor_line_buffer
- bmi kill_cansel
-
- movea.l a1,a0 ;ìsô¬
- adda (cursorXbyte,pc),a1
- addq.l #1,a1 ;â|âCâôâ^
- EndChk2 a1
- moveq #0,d2
- bra 1f
- @@:
- suba d2,a0
- 1:
- subq.l #1,a0
- TopChk a0
- move.b (a0),d2 æOé╠ìsé╠âoâCâgÉö
- subq.l #1,a0
- beq @f
- TopChk a0
- cmpi.b #CR,(a0)
- bne @b æOé╠ìsé¬ëⁿìsé┼ÅIéφéΘé▄é┼îJéΦò╘é╖
- @@:
- addq.l #2,a0
- EndChk2 a0
- move.b (a0)+,d2
- EndChk a0
- moveq #0,d0
- bra kill_region_start
- kill_cansel:
- addq.l #8,sp
- rts
-
- * K : âJü[â\âïü`ò╢ûûâyü[âXâg
- key_yank_to_end_of_line:
- pea (yank_and_kill_condrv,pc)
- bra kill_to_end_of_line_sub
-
- * ^K : âJü[â\âïü`ò╢ûûâJâbâg
- key_kill_to_end_of_line:
- pea (key_kill_condrv,pc)
- bra kill_to_end_of_line_sub
-
- kill_to_end_of_line_sub:
- bsr get_cursor_line_buffer
- bmi kill_cansel
-
- moveq #0,d3
- move.b (a1)+,d3
- move (cursorXbyte,pc),d1
- adda d1,a1
- EndChk2 a1
- movem.l (pastbuf_size,pc),d2/a2
- * movea.l (pastbuf_adr,pc),a2
- subq.l #1,d2
- kill_to_end_of_line_loop:
- cmp d1,d3
- bne @f
-
- tst.b (a1)+ âJü[â\âïé¬ëEÆ[é╔éáé┴é╜ÅΩìç
- beq set_nulstr_yankptr
- EndChk a1
- move.b (a1)+,d3
- beq set_nulstr_yankptr
- EndChk a1
- moveq #0,d1
- @@:
- move.b (a1)+,d0
- cmpi.b #CR,d0
- beq set_nulstr_yankptr
- EndChk a1
- move.b d0,(a2)+
- addq #1,d1
- subq.l #1,d2
- bne kill_to_end_of_line_loop
- set_nulstr_yankptr:
- movea.l (pastbuf_adr,pc),a1
- bsr cut_tail_mb_high
- clr.b (a2)
- lea (past_pointer,pc),a1
- move.l a2,(a1)
- rts
-
- * a1.l é⌐éτé╠ò╢ÄÜù±é╠ûûö÷é╠ö╝Æ[é╚âRü[âhé≡ìφéΘ.
- * (-1,a2) é¬â}âïâ`âoâCâgò╢ÄÜé╠ 1 âoâCâgû┌é╚éτ a2.l -= 1.
- * in a1.l ò╢ÄÜù±é╠ɵô¬âAâhâîâX
- * a2.l ò╢ÄÜù±é╠ûûö÷âAâhâîâX
- * out a2.l üV
- * break d0/a0
-
- cut_tail_mb_high:
- cmpa.l a1,a2
- beq cut_tail_mb_high_skip
- lea (a2),a0
- cut_tail_mb_high_loop:
- move.b -(a0),d0
- bpl cut_tail_mb_high_end ;ASCII
- cmpi.b #$a0,d0
- bcs @f ;multi-byte
- cmpi.b #$e0,d0
- bcs cut_tail_mb_high_end ;kana
- @@:
- cmpa.l a1,a2
- bne cut_tail_mb_high_loop
- addq.l #1,a0
- cut_tail_mb_high_end:
- suba.l a2,a0
- move a0,-(sp)
- lsr (sp)+
- bcs cut_tail_mb_high_skip
- subq.l #1,a2
- cut_tail_mb_high_skip:
- rts
-
-
- * ü¬âJâbâgüòâyü[âXâg / ü½âJü[â\âïê┌ô« --------- *
-
- * A : êΩîΩì╢é╔ê┌ô«
- backward_word_loop:
- move (cursorY,pc),d0
- lsl #2,d0
- movea.l (a3,d0.w),a1
- subq.l #2,a1
- TopChk a1
- cmpi.b #CR,(a1)
- beq backward_word_end
- key_backward_word:
- bsr key_backward_char
- tst.l d0
- ble backward_word_end
- cmpi #CR,d0
- beq backward_word_end
-
- move (cursorXbyte,pc),d1
- beq backward_word_loop ;ì╢Æ[é▄é┼Éié±é╛
- cmpi #$20,d0
- bls key_backward_word
- move (cursorY,pc),d0
- lsl #2,d0
- movea.l (a3,d0.w),a1
- adda d1,a1
- EndChk2 a1
- cmpi.b #$20,(a1)
- bhi key_backward_word
- backward_word_end:
- forward_word_end:
- rts
-
- * F : êΩîΩëEé╔ê┌ô«
- key_forward_word:
- bsr get_cursor_line_buffer
- bmi forward_word_end
-
- move (cursorXbyte,pc),d1
- adda d1,a1
- addq.l #1,a1
- EndChk2 a1
- cmpi.b #CR,(a1)
- beq key_forward_char
- forward_word_loop:
- .ifdef __EOBCUR
- tst.b (a1)
- beq forward_word_end
- .endif
- cmpi.b #SPACE,(a1)
- sls d4
- bsr key_forward_char
-
- move (cursorY,pc),d0
- lsl #2,d0
- movea.l (a3,d0.w),a1
- moveq #0,d2
- move.b (a1)+,d2 ;âJü[â\âïìsé╠âoâCâgÉö
-
- move (cursorXbyte,pc),d1
- adda d1,a1
- EndChk2 a1
- cmpi.b #CR,(a1)
- beq forward_word_end
- tst.b d4
- beq @f
- cmpi.b #SPACE,(a1) ɺîΣïLìå(orï≤öÆ)é¬æ▒é¡è╘é═
- bhi forward_word_end êΩÆPîΩé╞î⌐é╚é╖
- @@:
- tst.b (a1)
- bpl @f
- cmpi.b #$a0,(a1)
- bcs forward_word_mb $80-$9f
- cmpi.b #$e0,(a1)
- bcs @f $e0-$ff
- forward_word_mb:
- addq #1,d1
- @@:
- addq #1,d1
- cmp d1,d2
- bne forward_word_loop
- movea.l (a3,d0.w),a1 âJü[â\âïé¬ëEÆ[é╔éáé┴é╜ÅΩìç
- addq.l #1,a1
- adda d1,a1
- EndChk2 a1
- tst.b (a1)+
- .ifdef __EOBCUR
- beq key_forward_char
- .else
- beq forward_char_end
- .endif
- EndChk a1
- tst.b (a1)+
- bne key_forward_word
- forward_char_end:
- rts
-
- * ü¿ , é╗é╠æ╝ : âJü[â\âïé≡êΩîàëEé╔ê┌ô«é╖éΘ
- key_forward_char:
- lea (cursorX,pc),a0
- .ifndef __EMACS
- move.l (a0),d6 ;cursorX/Xbyte
- .endif
- move (a0)+,d3 ;cursorX
- move (a0)+,d2 ;cursorXbyte
- move (a0),d7 ;cursorY
-
- bsr get_cursor_line_buffer
- bmi forward_char_end
- moveq #0,d1
- move.b (a1)+,d1
- beq forward_char_end
-
- adda d2,a1
- EndChk2 a1
- bsr get_char
- cmp d1,d2
- beq cursor_to_right_tip
- .ifdef __EOBCUR
- cursor_to_right_move:
- .endif
- subq.l #cursorY-cursorX,a0
- move d3,(a0)+
- move d2,(a0)
- .ifndef __EMACS
- * âJü[â\âïê┌ô«é╔ö║éñâ}ü[âNö╜ô]ù╠êµé╠ò╧ìXé≡Æ╟Å]é│é╣éΘ
- redraw_cursor_char:
- bsr draw_char_c
- move.l (cursorX,pc),d6 cursorX/Xbyte
- move (cursorY,pc),d7
- bra draw_char_c
- .endif
- cursor_to_right_endofbuf:
- rts
-
- cursor_to_right_tip:
- tst.b (a1)+
- .ifdef __EOBCUR
- beq cursor_to_right_move
- .else
- beq cursor_to_right_endofbuf
- .endif
- EndChk a1
- .ifndef __EOBCUR
- tst.b (a1)
- beq cursor_to_right_endofbuf
- .endif
-
- subq.l #cursorY-cursorX,a0
- clr.l (a0)+
-
- move (window_line,pc),d0
- cmp (a0),d0 ;cursorY
- bne @f
-
- .ifdef __EMACS
- bra centering_a1
- centering_a1_prev:
- subq.l #1,a1
- suba d0,a1
- TopChk a1
- centering_a1:
- moveq #0,d3 ;a1 = ÉVé╡éóâJü[â\âïìs
- moveq #0,d2
- st (line_buf) ;âJü[â\âïìsé≡Æåë¢é╔ò\Īé╖éΘ
- bra jump_scroll
- ;X=0,Xbyte=0 é╠é▄é▄é┼éµéó
- .else
- bsr scroll_up_sub
- subq #1,d7
- move (window_line,pc),d0
- .ifdef __EMACS ;É╠é╠û╝ÄcéΦ:-)
- bra draw_line_d0
- .else
- bsr draw_line_d0
- bra redraw_cursor_char
- .endif
- .endif
- @@:
- addq #1,(a0) cursorY
- .ifdef __EMACS
- rts
- .else
- bra redraw_cursor_char
- .endif
-
- * Z , ^Z , ~ü¿ : êΩìsâXâNâìü[âïâAâbâv
- key_move_window_down:
- lea (line_buf,pc),a3
- tst.l (a3)
- bmi move_window_down_end
-
- move (window_line,pc),d0
- lsl #2,d0
- movea.l (a3,d0.w),a1
- moveq #0,d1
- move.b (a1)+,d1
- adda d1,a1
- EndChk2 a1
- tst.b (a1)+
- beq move_window_down_end
- EndChk a1
- .ifndef __EOBCUR
- tst.b (a1)
- beq move_window_down_end
- .endif
-
- bsr scroll_up_sub
- lea (cursorY,pc),a4
- tst (a4)
- beq @f
-
- subq #1,(a4) cursorY
- bra move_window_down_cursor_fixed
- @@:
- bsr check_column_pop_curx
- .ifndef __EMACS
- moveq #0,d0
- bsr draw_line_d0
- .endif
- move_window_down_cursor_fixed:
- move (window_line,pc),d0
- bra draw_line_d0
- move_window_down_end:
- rts
-
- * X , ^X , ü½ : âJü[â\âïë║ê┌ô«
- key_next_line:
- lea (line_buf,pc),a3
- lea (cursorY,pc),a2
- move (a2),d0
- cmp (window_line,pc),d0
- beq next_line_scroll
-
- addq #1,d0
- lsl #2,d0
- tst (a3,d0.w)
- bmi next_line_end
- addq #1,(a2) ;cursorY
- .ifdef __EMACS
- bra check_column_pop_curx
- .else
- bsr check_column_pop_curx
- move (a2),d0 ;cursorY
- bra next_line_no_scroll
- .endif
- next_line_scroll:
- lsl #2,d0
- movea.l (a3,d0.w),a1
- moveq #0,d1
- move.b (a1)+,d1
- adda d1,a1
- EndChk2 a1
- tst.b (a1)+
- beq next_line_end
- EndChk a1
- .ifndef __EOBCUR
- tst.b (a1)
- beq next_line_end
- .endif
- .ifdef __EMACS
- bsr centering_a1
- bra check_column_pop_curx
- .else
- bsr scroll_up_sub
- bsr check_column_pop_curx
- move (window_line,pc),d0
- .ifndef __EMACS ;É╠é╠û╝ÄcéΦ:-)
- next_line_no_scroll:
- bsr draw_line_d0
- subq #1,d0
- .endif
- bra draw_line_d0
- .endif
- next_line_end:
- move_window_up_end:
- rts
-
- * W , ^W , ~ü⌐ : êΩìsâXâNâìü[âïâ_âEâô
- key_move_window_up:
- lea (line_buf,pc),a3
- movea.l (a3),a1
- move.l a1,d0
- bmi move_window_up_end ;âoâbâtâ@é¬ï≤
-
- subq.l #1,a1
- TopChk a1
- moveq #0,d0
- move.b (a1),d0
- beq move_window_up_end
- bsr scroll_down_sub
- move (window_line,pc),d0
- lea (cursorY,pc),a4
- cmp (a4),d0
- beq @f
-
- addq #1,(a4)
- bra move_window_up_cursor_fixed
- @@:
- bsr check_column_pop_curx
- .ifndef __EMACS
- move (a4),d0 cursorY
- bsr draw_line_d0
- .endif
- move_window_up_cursor_fixed:
- moveq #0,d0
- bra draw_line_d0
-
- * E , ^E , ü¬ : âJü[â\âïÅπê┌ô«
- key_previous_line:
- lea (line_buf,pc),a3
- lea (cursorY,pc),a0
- subq #1,(a0)
- .ifdef __EMACS
- bpl check_column_pop_curx
- .else
- bpl previous_line_no_scroll
- .endif
- clr (a0)
- movea.l (a3),a1
- move.l a1,d0
- bmi previous_line_end ;âoâbâtâ@é═ï≤
-
- subq.l #1,a1
- TopChk a1
- moveq #0,d0
- move.b (a1),d0
- beq previous_line_end
-
- .ifdef __EMACS
- bsr centering_a1_prev
- bra check_column_pop_curx
- .else
- bsr scroll_down_sub
- bsr check_column_pop_curx
- moveq #0,d0
- .ifndef __EMACS ;É╠é╠û╝ÄcéΦ:-)
- bra @f
- previous_line_no_scroll:
- bsr check_column_pop_curx
- move (a0),d0
- @@:
- bsr draw_line_d0
- addq #1,d0
- .endif
- bra draw_line_d0
- .endif
- previous_line_end:
- rts
-
- * ò\Īëµû╩é╠ì╢Åπé╔éóé╜ÅΩìçé═âXâNâìü[âïé╡é─é⌐éτÅæé½æ½é╖
- backward_char_prev_line:
- addq #1,(a4) ;cursorY
-
- subq.l #1,a1
- TopChk a1
- moveq #0,d0
- move.b (a1),d0
- beq backward_char_end
-
- .ifdef __EMACS
- bsr centering_a1_prev
- bra check_column_max
- .else
- bsr scroll_down_sub
- addq #1,(a4) ;cursorY
- moveq #0,d0
- bsr draw_line_d0
- .endif
-
- * S , ^S , ü⌐ : âJü[â\âïì╢ê┌ô«
- key_backward_char:
- .ifdef __EMACS
- lea (cursorY,pc),a4
- .else
- lea (cursorX,pc),a4
- move.l (a4)+,d6 ;cursorX/Xbyte
- move (a4),d7 ;cursorY
- .endif
- moveq #0,d2
- moveq #0,d3
- bsr get_cursor_line_buffer
- bmi backward_char_end
-
- move (cursorXbyte,pc),d1
- bne @f
-
- subq #1,(a4) ;cursorY
- bmi backward_char_prev_line
-
- bsr get_cursor_line_buffer
- moveq #0,d1
- move.b (a1),d1
- @@:
- addq.l #1,a1
- EndChk a1
- @@:
- move d3,d4
- swap d4
- move d2,d4
- bsr get_char
- cmp d2,d1
- bne @b
- move.l d4,-(a4) ;cursorX/Xbyte
- .ifdef __EMACS
- rts
- .else
- bra redraw_cursor_char
- .endif
- backward_char_end:
- moveq #-1,d0
- rts
-
-
- * ^A : ìsé╠ì╢Æ[é╔ê┌ô«
- key_beginning_of_line:
- lea (cursorX,pc),a0
- clr.l (a0)+ ;cursorX/Xbyte
- .ifdef __EMACS
- rts
- .else
- lea (line_buf,pc),a3
- move (a0),d0 ;cursorY
- bra draw_line_d0
- .endif
-
- * ROLL_DOWN , ^R : âXâNâìü[âïâ_âEâô
- key_scroll_down:
- lea (line_buf,pc),a3
- movea.l (a3),a0
- move (window_line,pc),d1
- move d1,d0
- addq #1,d0
- lsl #2,d0
- adda d0,a3 ;a3=&line_buf[ì┼îπ+1]
-
- moveq #-1,d2
- bsr scroll_down_p_sub
- addq #1,d2
- beq key_beginning_of_page ;î│é⌐éτɵô¬ìsé╔éóé╜ÅΩìçé═ì╢Åπé╔ê┌ô«é╖éΘ
- bsr check_column_pop_curx
- bra draw_backscroll
-
- * ROLL_UP , ^C : âXâNâìü[âïâAâbâv
- key_scroll_up:
- lea (line_buf,pc),a3
- move (window_line,pc),d1
- move d1,d0
- lsl #2,d0
- move.l (a3,d0.w),d0
- bmi key_end_of_buffer ;1ò┼ò¬ë║é╔ìsé»é╚éó
-
- movea.l d0,a0 ;a0=ì┼ÅIìsé╠âAâhâîâX
- move d1,d2
- scroll_up_loop:
- moveq #0,d0
- move.b (a0)+,d0
- adda d0,a0
- EndChk2 a0
-
- tst.b (a0)+
- beq @f ;ìíé╠ìsé¬âoâbâtâ@ì┼ÅIìs
- EndChk a0
-
- tst.b (a0)
- @@: beq key_end_of_buffer ;ëⁿìsÆ╝îπé╚éτì┼îπé╠ìsé═ôⁿéΩé╚éó
-
- move d1,d0
- movea.l a3,a1
- lea (4,a1),a2
- subq #1,d0
- @@:
- move.l (a2)+,(a1)+
- dbra d0,@b
- move.l a0,(a1)
- dbra d2,scroll_up_loop
- bsr check_column_pop_curx
- bra draw_backscroll
-
- * M-< , C-rolldown : set-mark + beginning-of-buffer
- .ifdef __EMACS
- key_beginning_of_buffer_mark:
- bsr key_set_mark_quiet
- .endif
- * T , F0 : âoâbâtâ@é╠ɵô¬ìsé╔ê┌ô«
- key_beginning_of_buffer:
- bsr beginning_of_buffer_sub
- * ^T : âJü[â\âïé≡î╗ì▌ò\ĪÆåé╠ëµû╩é╠ì╢Åπé╔ê┌ô«
- key_beginning_of_page:
- lea (cursorX,pc),a0
- clr.l (a0)+ cursorX/Xbyte
- clr (a0) cursorY
- bra draw_backscroll
-
- * M-> , C-rollup : set-mark + end-of-buffer
- .ifdef __EMACS
- key_end_of_buffer_mark:
- bsr key_set_mark_quiet
- bra key_end_of_buffer
- .endif
-
- * B , F1 : âoâbâtâ@é╠ì┼ÅIìsé╔ê┌ô«
- key_end_of_buffer:
- bsr end_of_buffer_sub
- jump_to_page_end:
- lea (cursorY,pc),a0
- move d2,(a0)
- bpl @f
- clr (a0)
- @@:
- bsr check_column_max ;æOé╠îàê╩Æué╔è╓îWé╚é¡ëEÆ[é╔ê┌ô«
- bra draw_backscroll
-
- * ^B : âJü[â\âïé≡î╗ì▌ò\ĪÆåé╠ëµû╩é╠ëEë║é╔ê┌ô«
- key_end_of_page:
- lea (line_buf,pc),a3
- movea.l a3,a0
- moveq #-1,d2
- @@:
- tst.l (a0)+
- bmi @f âoâbâtâ@ûûö÷
- addq #1,d2
- cmp (window_line,pc),d2
- bne @b
- @@:
- bra jump_to_page_end
-
- * ^F : ìsé╠ëEÆ[é╔ê┌ô«
- key_end_of_line:
- bsr get_cursor_line_buffer
- bmi end_of_line_end
- .ifdef __EOBCUR
- .ifdef __EMACS
- bra check_column_max
- .else
- bsr check_column_max
- move (cursorY,pc),d0
- bra draw_line_d0
- .endif
- .else
- move (cursorXbyte,pc),d2
- move (cursorX,pc),d3
- moveq #0,d1
- move.b (a1)+,d1 d1=âoâCâgÉö
- adda d2,a1 d2=cursorXbyte
- EndChk2 a1
- @@:
- move d3,d4 d3=cursorX
- swap d4
- move d2,d4
- bsr get_char
- cmp d1,d2
- bne @b
-
- lea (cursorX,pc),a0
- move.l d4,(a0)+ cursorX/Xbyte
- .ifndef __EMACS
- move (a0),d0 cursorY
- bra draw_line_d0
- .endif
- .endif
- end_of_line_end:
- already_help:
- rts
-
- * ^J , ^] , HELP : âwâïâvò\Ī
- key_help:
- lea (bitflag,pc),a0
- tas (a0) HELPMODE_bit
- bmi already_help
-
- move.l (line_buf,pc),-(sp)
- lea (buffer_size,pc),a0
- move.l (a0),-(sp) âwâïâvâüâbâZü[âWé╠ùeù╩
- move.l #help_mes_end-help_mes_top,(a0)+
- move.l (a0),-(sp) ;mark_char_adr
- clr.l (a0)+
- move.l (a0),-(sp) ;mark_line_adr
- clr.l (a0)+
- move.l (a0),-(sp) cursorX/byte
- clr.l (a0)+
- move.l (a0),-(sp) cursorY/curx_save
- clr.l (a0)
-
- move.l a6,-(sp)
- lea (help_buf_struct,pc),a6
- bsr key_beginning_of_buffer
-
- .ifndef __EMACS
- move.b (ins_clr_flag,pc),-(sp)
- bsr clr_ins_led
- .endif
-
- bsr keyinp_loop_start ;âüâCâôâïü[âvé≡ì─ïAî─é╤Åoé╡
- lea (cursorY,pc),a0
-
- .ifndef __EMACS
- bsr restore_ins_led
- move.b (sp)+,(ins_clr_flag-cursorY,a0)
- .endif
-
- movea.l (sp)+,a6
- bclr #HELPMODE_bit,(bitflag-cursorY,a0)
- move.l (sp)+,(a0) ;cursorY/curx_save
- move.l (sp)+,-(a0) ;cursorX/byte
- move.l (sp)+,-(a0) ;mark_line_adr
- move.l (sp)+,-(a0) ;mark_char_adr
- move.l (sp)+,-(a0) buffer_size
-
- movea.l (sp)+,a0
- bsr reset_line_address_buf_2
- bsr draw_backscroll
- bra initialize_keypast_buffer
- ** rts
-
-
- * Æ╟ë┴ï@ö\ ------------------------------------ *
-
- * C-= : âoâbâtâ@ê╩Æuò\Ī
- * "line:$00000000 char:$00000000 column:$00/$00 code:$0000"
-
- .ifdef __BUF_POS
- key_buffer_position:
- lea (general_work,pc),a1
- lea (buf_pos_line,pc),a0
- bsr str_copy
- move.l a1,d0
- bsr get_cursor_line_buffer
- bmi buffer_position_end ;û{ôûé╔òKùvé⌐?
- exg d0,a1
- movea.l d0,a2 ;d0 = a2 = line
- bsr to_hex
-
- ** lea (buf_pos_char,pc),a0
- bsr str_copy
- addq.l #1,a2
- adda (cursorXbyte,pc),a2
- EndChk2 a2 ;a2 = char
- move.l a2,d0
- bsr to_hex
-
- ** lea (buf_pos_col1,pc),a0
- bsr str_copy
- lea (cursorX,pc),a3
- moveq #0,d0
- move (a3),d0
- bsr to_hex
-
- ** lea (buf_pos_col2,pc),a0
- bsr str_copy
- move.l (a3),-(sp) ;X/Xbyte ò█æ╢
- PUSH a0-a3 ;end-of-line é╞ô»é╢Åêù¥é≡é╡é─
- bsr check_column_max ;ì┼æσîàê╩Æué≡ïüé▀éΘ
- POP a0-a3
- moveq #0,d0
- move (a3),d0
- move.l (sp)+,(a3) ;X/Xbyte ò£ïA
- bsr to_hex
-
- ** lea (buf_pos_code,pc),a0
- bsr str_copy
- exg a1,a2 ;a1 = char
- bsr get_char ;d0 = code
- lea (a2),a1
- bsr to_hex
-
- lea (general_work,pc),a1
- bra print_message
- buffer_position_end:
- rts
-
- buf_pos_line: .dc.b 'line:$',0
- buf_pos_char: .dc.b ' char:$',0
- buf_pos_col1: .dc.b ' column:$',0
- buf_pos_col2: .dc.b '/$',0
- buf_pos_code: .dc.b ' code:$',0
- .even
-
- * ÉöÆlé≡ 16 ÉiÉöò╢ÄÜù±é╔ò╧è╖é╖éΘ.
- * in d0.l ÉöÆl
- * a1.l ò╢ÄÜù±é≡Åæé½ì₧é▐âoâbâtâ@
- * out a1.l NUL é╠âAâhâîâX
- * break d0.l
- * Ädùl: ò╢ÄÜù±é╠ûûö÷é╔é═ NUL é¬Åæé½ì₧é▄éΩéΘ.
- * Åπê╩é╠ 0 é═Å╚ù¬é│éΩéΘ.
-
- usereg: .reg d1
- to_hex:
- move.l usereg,-(sp)
- clr -(sp) ;ö╘ò║(NUL é≡îôé╦éΘ)
- to_hex_loop:
- moveq #$f,d1 ;ë║ê╩îàé⌐éτĵéΦÅoé╖
- and d0,d1
- addi #'0',d1
- cmpi #'9',d1
- bls @f
- .ifdef __UPPER
- addq #'A'-('9'+1),d1
- .else
- addi #'a'-('9'+1),d1
- .endif
- @@:
- move.b d1,-(sp) ;âXâ^âbâNÅπé╔ù¡é▀éΘ
- lsr.l #4,d0
- bne to_hex_loop
- * d0.l = $1a0 é╠ÅΩìç
- * sp: .dc '1'<<8, 'a'<<8, '0'<<8, 0
- to_hex_loop2:
- move.b (sp)+,(a1)+ ;Åπê╩îàé⌐éτâoâbâtâ@é╔ô]æùé╖éΘ
- bne to_hex_loop2
- subq.l #1,a1
- move.l (sp)+,usereg
- rts
-
- .endif /* __BUF_POS */
-
- * C-l : ëµû╩ì─ò`ëµ
-
- .ifdef __EMACS
- key_redraw_window:
- bsr clear_text_plane ;âoâbâNâìâOëµû╩ôhéΦé┬é╘é╡
- bsr draw_window_tipline ;ÅπÆ[é╞ë║Æ[é╠ëíÉⁿé≡ò`é¡
- .if 0
- bra draw_backscroll
- ** rts
- .else
- bsr get_cursor_line_buffer
- st (a3) ;âJü[â\âïìsé≡Æåë¢é╔ò\Īé╖éΘ
- move (cursorX,pc),d3
- move (cursorXbyte,pc),d2
- bra jump_scroll
- ** rts
- .endif
- .endif
-
-
- * C-bs : âoâbâtâ@âèâôâOÆåÄ~üEì─èJ
-
- key_toggle_buffering_mode:
- bsr toggle_buffering_mode
- bra display_system_status
-
- toggle_buffering_mode:
- PUSH d0-d1/a0
- lea (condrv_put_char,pc),a0
- eori #RTS.xor.MOVEM,(a0)
-
- cmpi.b #1,(MPUTYPE)
- bls @f
-
- moveq #3,d1
- IOCS _SYS_STAT
- @@:
- POP d0-d1/a0
- insert_file_cancel:
- rts
-
- * C-clr : âoâbâtâ@Åëè·ë╗
-
- key_clear_buffer:
- lea (mark_char_adr,pc),a0
- clr.l (a0)+ ;mark_char_adr
- clr.l (a0)+ ;mark_line_adr
-
- bsr initialize_backscroll_buffer
- bra key_beginning_of_buffer
-
- * ^Y : âtâ@âCâïô╟é▌ì₧é▌
- key_insert_file:
- move.b (bitflag,pc),d0
- bmi insert_file_cancel HELPò\ĪÆåé═Ägùpòsë┬
-
- lea (insert_file_prompt,pc),a1
- bsr input_string
- beq insert_file_cancel
- bsr unfold_home
- bsr check_diskready
- bmi disk_notready_error
-
- clr -(sp)
- move.l a1,-(sp)
- DOS _OPEN
- addq.l #6,sp
- move.l d0,d4
- bmi fileopen_error
-
- moveq #6,d1
- bsr is_file_io_enable
- bne fileread_disable
-
- lea (io_buffer,pc),a5
- lea (REQHEAD_SIZE,a5),a0
- move.l a0,(DEVIO_ADDRESS,a5)
- insert_file_loop:
- pea (IOBUFSIZE)
- move.l a0,-(sp)
- move d4,-(sp)
- DOS _READ
- lea (10,sp),sp
- move.l d0,(DEVIO_LENGTH,a5)
- ble insert_file_end
- bsr xcon_output
- bra insert_file_loop
- insert_file_end:
- bsr close_filehandle_d4
- bsr clear_mark * _and_redraw
- bra key_end_of_buffer
-
- close_filehandle_d4:
- move d4,-(sp)
- DOS _CLOSE
- addq.l #2,sp
- rts
-
- * ôⁿÅoù═ë┬ö\é╚éτ d0.b=0
- is_file_io_enable:
- move d4,-(sp)
- clr -(sp)
- DOS _IOCTRL
- asr.b #8,d0
- bpl @f
-
- move d1,(sp)
- DOS _IOCTRL
- not.b d0
- @@:
- addq.l #4,sp
- rts
-
- * in a1.l âtâ@âCâïû╝
- * d0.l 0:OK -1:Error
- check_diskready:
- lea (GETSMAX+1,a1),a0
- move.l a0,-(sp)
- move.l a1,-(sp)
- DOS _NAMECK
- addq.l #8,sp
- tst.l d0 üuâÅâCâïâhâJü[âhÄwÆΦé╚é╡üvé╛é»OK
- bne nocheck_diskready æ╝é═âIü[âvâôÄ₧é╔âGâëü[é¬é¿é½éΘ
- moveq #0,d1
- @@: move.b (a0),d1
- subi.b #'A'-1,d1 DRVCTRLé╖éΘâhâëâCâu
-
- clr.b (2,a0)
- move.l a0,-(sp)
- move.l a0,-(sp)
- clr -(sp)
- DOS _ASSIGN
- lea (10,sp),sp
- cmpi #$50,d0
- beq @b ë╝æzâhâëâCâué╠Éeé≡é╜é╟éΘ
-
- move d1,-(sp) MD=0
- DOS _DRVCTRL
- addq.l #2,sp
- tst.l d0
- bmi disk_notready
- lsr #1,d0
- bcs disk_notready âüâfâBâAîδæ}ôⁿ
- lsr #1,d0
- bcc disk_notready æ}ôⁿé│éΩé─éóé╚éó
- nocheck_diskready:
- moveq #0,d0
- rts
- disk_notready:
- moveq #-1,d0
- rts
-
- filewrite_disable:
- move #'Åo',d0
- bra @f
- fileread_disable:
- move #'ôⁿ',d0
- @@:
- lea (file_io_disable_mes,pc),a1
- move d0,(a1)
- bsr close_filehandle_d4
- bra 1f
-
- fileopen_error:
- lea (fopen_err_mes_tbl,pc),a1
- move.b d0,(fopen_err_mes-fopen_err_mes_tbl,a1)
- check_open_err:
- cmp.b (a1)+,d0
- beq 1f
- @@: tst.b (a1)+
- bne @b
- bra check_open_err
-
- disk_notready_error:
- lea (disk_notready_mes,pc),a1
- 1:
- bra print_message
-
- * âtâ@âCâïû╝ɵô¬é╠ ~/ ïyé╤ ~\ é≡ $HOME é╔ôWèJé╖éΘ.
- * in a1.l âtâ@âCâïû╝
- * break d0
-
- unfold_home:
- movem.l a0-a2,-(sp)
- lea (a1),a0
- cmpi.b #'~',(a0)+
- bne unfold_home_skip
- cmpi.b #'/',(a0) ;~/
- beq @f
- cmpi.b #'\',(a0) ;~\
- bne unfold_home_skip
- @@:
- lea (-(256+256),sp),sp
- pea (sp) ;è┬ï½ò╧Éö HOME é╠Ælé≡Ä√ô╛
- clr.l -(sp)
- pea (env_home,pc)
- DOS _GETENV
- addq.l #12-4,sp
- move.l d0,(sp)+
- bne unfold_home_skip2
-
- lea (sp),a2
- STRCAT a0,a2 ;'/'ê╚ì~é≡ÿAîïé╖éΘ
- lea (sp),a0
- lea (a1),a2
- STRCPY a0,a2 ;î│é╠âoâbâtâ@é╔ô]æù
- unfold_home_skip2:
- lea (256+256,sp),sp
- unfold_home_skip:
- movem.l (sp)+,a0-a2
- rts
-
-
- .ifndef __EMACS
- * L : âëâxâïÆΦï`(âJü[â\âïê╩Æué═ì╢Æ[)
- key_set_label:
- lea (define_label_mes,pc),a0
- moveq #0,d0
- bsr print_label_mes
- bsr get_key_a_z
- bhi define_label_end
-
- lsl #2,d0
- lea (label_buffer,pc),a0
- adda d0,a0 èiö[ɵ
-
- move (cursorY,pc),d0
- lsl #2,d0
- lea (line_buf,pc),a1
- adda d0,a1 ò█æ╢î│
-
- move.l (a1),(a0)+
- define_label_end:
- jump_label_end:
- rts
-
- * Shift + 7 (') : ÄwÆΦâëâxâïé▄é┼ê┌ô«
- key_jump_label:
- lea (jump_label_mes,pc),a0
- moveq #-1,d0
- bsr print_label_mes
- bsr get_key_a_z
- bhi jump_label_end
-
- lsl #2,d0
- lea (label_buffer,pc),a0
- adda d0,a0
- move.l (a0),d1
- beq jump_label_end ûóÆΦï`é╠âëâxâï
- movea.l d1,a0 Jumpɵ
-
- movea.l (buffer_now,a6),a1
- bra @f
- jump_label_loop
- subq.l #1,a1
- TopChk a1
- move.b (a1),d0
- beq jump_label_end âoâbâtâ@é╠ɵô¬é▄é┼ìsé┴é╜
- subq.l #1,a1
- suba d0,a1
- TopChk a1
- @@:
- cmpa.l a0,a1
- bne jump_label_loop
-
- moveq #0,d2
- moveq #0,d3
- bra jump_scroll
-
- print_label_mes:
- lea (general_work,pc),a1
- bsr str_copy
-
- moveq #'A',d1
- lea (label_buffer,pc),a0
- label_print_loop:
- tst.l (a0)+
- sne -(sp)
- cmp.b (sp)+,d0
- bne @f
-
- move.b d1,(a1)+
- @@:
- addq.b #1,d1
- cmpi.b #'Z',d1
- bls label_print_loop
-
- lea (label_mes_end,pc),a0
- bsr str_copy
- lea (general_work,pc),a1
- bra print_message
-
- get_key_a_z:
- bsr get_key_sub
- andi #$df,d0
- subi #'A',d0
- cmpi #'Z'-'A',d0
- rts
-
- .endif
-
- str_copy:
- move.b (a0)+,(a1)+
- bne str_copy
- subq.l #1,a1
- rts
-
- get_key_sub:
- suba.l a1,a1
- get_key_sub_loop:
- IOCS _ONTIME
- cmp.l a1,d0
- bcs @f
-
- bsr blink_cursor_direct
- IOCS _ONTIME
- lea (BLINKCYCLE),a1
- adda.l d0,a1
- @@:
- bsr call_orig_b_keysns
- tst.l d0
- beq get_key_sub_loop
-
- bsr call_orig_b_keyinp
- tst.b d0
- beq get_key_sub_loop
-
- bra clear_message âvâìâôâvâgé≡Å┴é╖
-
- * Q : É▌ÆΦò╧ìX
- key_toggle_buffer_mode:
- lea (toggle_buffer_mode_mes,pc),a1
- bsr print_message
- bsr get_key_sub
- ori.b #$20,d0
-
- .irpc %a,trbeicx
- cmpi.b #'&%a',d0
- beq toggle_buffer_mode_%a
- .endm
- rts
-
- * ò\ĪÅ≤æ╘é¬ò╧éφéΘâtâëâO
- key_toggle_tab_disp:
- toggle_buffer_mode_t:
- lea (option_t_flag,pc),a0 Tabò\Ī
- bra @f
- key_toggle_cr_disp:
- toggle_buffer_mode_r:
- lea (option_r_flag,pc),a0 R:ëⁿìsò\Ī
- bra @f
- @@:
- not.b (a0)
- bra draw_backscroll
-
- * ò\Īé╔é═è╓îWé╚éóâtâëâO
-
- * B(-nb:BSÅêù¥)
- toggle_buffer_mode_b:
- toggle_option_nb:
-
- PUT_BS_TBL: .reg (putbuf_ctrl_table+BS*2)
- PUT_BS: .equ (putbuf_bs-putbuf_ctrl_table)
- PUT_BS_NB: .equ (putbuf_bs_nb-putbuf_ctrl_table)
-
- lea (PUT_BS_TBL,pc),a0
- eori #PUT_BS.xor.PUT_BS_NB,(a0)
-
- not.b (option_nb_flag-PUT_BS_TBL,a0)
- rts
-
- * E(-ne:ESCìφÅ£)
- toggle_buffer_mode_e:
- toggle_option_ne:
-
- PUT_ESC_TBL: .reg (putbuf_ctrl_table+ESC*2)
- PUT_ESC: .equ (putbuf_esc-putbuf_ctrl_table)
- PUT_ESC_NE: .equ (putbuf_esc_ne-putbuf_ctrl_table)
-
- lea (PUT_ESC_TBL,pc),a0
- eori #PUT_ESC.xor.PUT_ESC_NE,(a0)
-
- not.b (option_ne_flag-PUT_ESC_TBL,a0)
- rts
-
- * I(-nt:TABò╧è╖)
- toggle_buffer_mode_i:
- toggle_option_nt:
-
- PUT_TAB_TBL: .reg (putbuf_ctrl_table+TAB*2)
- PUT_TAB: .equ (putbuf_tab-putbuf_ctrl_table)
- PUT_TAB_NT: .equ (putbuf_tab_nt-putbuf_ctrl_table)
-
- lea (PUT_TAB_TBL,pc),a0
- eori #PUT_TAB.xor.PUT_TAB_NT,(a0)
-
- not.b (option_nt_flag-PUT_TAB_TBL,a0)
- rts
-
- * C(-nc:ɺîΣïLìåìφÅ£)
- toggle_buffer_mode_c:
- toggle_option_nc:
-
- PUT_CTRL: .equ (putbuf_ctrl-putbuf_ctrl_table)
- PUT_CTRL_NC: .equ (putbuf_ctrl_nc-putbuf_ctrl_table)
-
- move.l #PUT_CTRL_LIST,d0
- lea (putbuf_ctrl_table,pc),a0
- toggle_option_nc_loop:
- lsr.l #1,d0
- bcc @f
- eori #PUT_CTRL.xor.PUT_CTRL_NC,(a0)
- @@: addq.l #2,a0
-
- tst.l d0
- bne toggle_option_nc_loop
-
- lea (option_nc_flag,pc),a0
- not.b (a0)
- rts
-
- toggle_buffer_mode_x:
- lea (case_table+'a',pc),a0 X:îƒì⌡Ä₧é╠æσò╢ÄÜżò╢ÄÜé╠ïµò╩ON/OFFÉ╪éΦè╖éª
- not.b (option_x_flag-(case_table+'a'),a0)
-
- moveq #'z'-'a',d0
- 1: eori.b #$20,(a0)+
- dbra d0,1b
- rts
-
- * Shift + Q : É▌ÆΦò╧ìXé╗é╠éQ(-m?)
- key_toggle_text_mode:
- lea (toggle_text_mode_mes,pc),a1
- bsr print_message
- bsr get_key_sub
- lea (option_m_flag,pc),a0
- subi.b #'1',d0
- cmpi.b #'4'-'1',d0
- bhi toggle_text_mode_end
- beq toggle_text_mode_4
- cmpi.b #'3'-'1',d0
- beq toggle_text_mode_3
-
- bchg d0,(a0) ;1:â}âEâXɺîΣ 2:âeâLâXâgò█æ╢
- toggle_text_mode_end:
- rts
-
- toggle_text_mode_4:
- bchg d0,(a0) ;4:âJü[â\âïɺîΣù}ɺ
- lea (iocs_curflg,pc),a0
- bne @f
- move (a0),(CSRSWITCH) ;ɺîΣé╖éΘ -> ɺîΣé╡é╚éó
- rts
- @@: move (CSRSWITCH),(a0) ;ɺîΣé╡é╚éó -> ɺîΣé╖éΘ
- IOCS _OS_CUROF
- rts
-
- toggle_text_mode_3:
- bchg d0,(a0) ;3:âeâLâXâgÄgùpÅ≤ï╡û│Äï
- bne toggle_text_mode_end
- bra gm_tgusemd_orig_tm1
-
- gm_tgusemd_orig_tm1:
- moveq #1,d2
- gm_tgusemd_orig:
- move.l #_GM_INTERNAL_MODE<<16+1,d1
- IOCS _TGUSEMD
- rts
-
- * êΩìsâXâNâìü[âïé╡é─âÅü[âNìXÉVüòò`ëµ ---------- *
-
- * in d0.w ÉVé╡éóì┼ÅπÆiìsé╠âoâCâgÉö
- * a1.l üV ûûö÷é╠âoâCâgÉöèiö[ê╩Æu
- * a3.l line_buf
-
- scroll_down_sub:
- movea.l a3,a0
- move (window_line,pc),d2
- move d2,d1
- addq #1,d1
- lsl #2,d1
- adda d1,a0
- lea (-4,a0),a2
- move d2,d1
- subq #1,d1
- @@:
- move.l -(a2),-(a0)
- dbra d1,@b
- suba d0,a1
- subq.l #1,a1
- TopChk a1
- move.l a1,(a2)
-
- move d2,d0
- lsl #2,d0 d0éαê╙ûíé¬éáéΘé╠é┼Æìê╙
- move.b d0,d1
- subq #1,d1
- lsl #8,d1
- move.b d0,d1
- addq.b #4-1,d1
- add (text_ras_no,pc),d1
- bra rascpy_down
-
- scroll_up_sub:
- movea.l a3,a0
- move (window_line,pc),d0
- subq #1,d0
- lea (4,a0),a2
- @@:
- move.l (a2)+,(a0)+
- dbra d0,@b
- move.l a1,(a0)
- bra rascpy_up_all
-
-
- * âJü[â\âïê╩Æué╠òΓÉ│ -------------------------- *
-
- * ò█æ╢é╡é─é¿éóé╜îàê╩Æué▄é┼ëEé╔ê┌ô«é╖éΘ.
- check_column_pop_curx:
- lea (cursorX,pc),a4
- move (curx_save,pc),(a4)
- bra check_column
-
- * î╗ì▌é╠ìsé╠ëEÆ[é▄é┼ê┌ô«é╖éΘ.
- check_column_max:
- lea (cursorX,pc),a4
- st (a4)
- bra check_column
-
- * ìíé▄é┼é╞ô»é╢âJü[â\âïîàê╩Æué▄é┼ëEé╔ê┌ô«é╖éΘ.
- check_column:
- lea (cursorX,pc),a4
- moveq #0,d4
- bsr get_cursor_line_buffer
- bmi check_column_end
-
- moveq #0,d3
- moveq #0,d2
- moveq #0,d1
- move.b (a1)+,d1
- EndChk a1
- check_column_loop:
- cmp d1,d2
- .ifdef __EOBCUR
- beq check_column_end2
- .else
- beq check_column_end
- .endif
- move d3,d4
- swap d4
- move d2,d4
- bsr get_char
- cmp (a4),d3 ;cursorX
- bls check_column_loop
- check_column_end:
- move.l d4,(a4)
- rts
-
- .ifdef __EOBCUR
- check_column_end2:
- tst.b (a1)
- bne check_column_end
- move d3,d4
- swap d4
- move d2,d4
- bra check_column_end
- .endif
-
- * êΩò╢ÄÜÄ√ô╛é╖éΘ ------------------------------ *
- * d0.w ò╢ÄÜ
- * d2.w ìsô¬é⌐éτé╠âoâCâgÉö
- * d3.w ìsô¬é⌐éτé╠îàÉö(2âoâCâgö╝èpò╢ÄÜé═1é╞é╡é─è╖ÄZé│éΩéΘ)
- * a1.l âoâbâtâ@â|âCâôâ^
-
- get_char:
- moveq #0,d0
- move.b (a1)+,d0
- beq get_char_endofbuf
- addq #1,d2
- EndChk a1
- tst.b d0
- bpl get_char_1byte ;ASCII
- cmpi.b #$a0,d0
- bcs get_char_2byte ;MS-Kanji
- cmpi.b #$e0,d0
- bcs get_char_1byte ;1byte Kana
- get_char_2byte:
- lsl #8,d0
- addq #1,d2
- move.b (a1)+,d0
- .if 1
- * ô±âoâCâgò╢ÄÜé╠Åπê╩âoâCâgé╛é»é¬âoâbâtâ@ûûö÷é╔ôⁿé┴é─éóé╜ÅΩìç
- * é╠û\æûæ╬ì⌠. Æ╩Åφé═ùLéΦô╛é╚éóé¬üAêΩë₧öOé╠ê╫.
- bne @f
- lsr #8,d0
- subq #1,d2
- bra get_char_1byte
- @@:
- .endif
- EndChk a1
- get_char_1byte:
- cmpi #TAB,d0
- bne @f
- ori #7,d3
- @@:
- addq #1,d3
- cmpi #$8140,d0
- bcs @f
- cmpi #$8540,d0
- bcs get_char_wide 8140ü`853fé▄é┼æSèp
- cmpi #$869f,d0
- bcs @f
- cmpi #$f000,d0
- bcc @f
- get_char_wide:
- addq #1,d3 869fü`efffé▄é┼æSèp
- @@: rts
-
- get_char_endofbuf:
- subq.l #1,a1
- rts
-
- * âëâXâ^âRâsü[î─é╤Åoé╡ ------------------------ *
-
- rascpy_up_all:
- move (window_line,pc),d0
- move #$0400,d1
- rascpy_up_shl2:
- lsl #2,d0
- rascpy_up:
- add (text_ras_no,pc),d1 âëâXâ^ö╘ìå
- move #$101,d2
- bra @f
- rascpy_down:
- move #$feff,d2
- @@:
- move.l a3,-(sp)
- lea (CRTC_R21),a3
- move (a3),-(sp)
- move #%1_0000_1100,(a3)
- bsr txrascpy_sub
- move (sp)+,(a3)
- movea.l (sp)+,a3
- rts
-
- * âoâbâNâXâNâìü[âïëµû╩é╠ì┼ë║ìsé≡Å┴é╡é─ìsôⁿù═é≡é╖éΘ
- * in a1.l âvâìâôâvâgé╞é╡é─ò\Īé╖éΘò╢ÄÜù±
- * out a1.l ôⁿù═âoâbâtâ@é╠ɵô¬+2(ôⁿù═é│éΩé╜ò╢ÄÜù±)
- * ccrZ ôⁿù═ò╢ÄÜÉöé¬ 0 é╚éτ ccrZ=1
- input_string:
- usereg: .reg d1-d7/a2-a5
- PUSH usereg
-
- * lea (condrv_put_char,pc),a5
- * bset #GETSS_bit,(bitflag-condrv_put_char,a5)
- * cmpi #RTS,(a5)
- * seq -(sp)
- * beq @f
- * bsr toggle_buffering_mode
- *@@:
- lea (stop_level,pc),a5
- move (a5),-(sp) ;push stop_level
- st (a5)
-
- move.l (TXADR),-(sp) ;IOCSworkæ╥ö≡
- move.l (TXSTOFST),-(sp)
- move.l (CSRXMAX),-(sp) ;& CSRYMAX
- move.l (CSRX),-(sp) ;& CSRY
- move.b (FIRSTBYTE),-(sp)
- move.b (TXCOLOR),(1,sp)
- move.b (LEDSTAT),-(sp)
-
- ;âeâLâXâgé≡æ╥ö≡
- move (window_line,pc),d0
- add (down_line,pc),d0
- addq #2,d0
- move d0,-(sp) ;!
- mulu #(128*16),d0
-
- lea (TEXT_VRAM),a2
- move.l a2,(TXADR) ;T-VRAMâAâhâîâX(âvâîü[âôé╠ÄwÆΦ)
- move.l d0,(TXSTOFST) ;ò\ĪâAâhâîâXâIâtâZâbâg
- adda.l d0,a2
- lea (line_store_buf+128*16*2,pc),a3
- bsr move_textblock ;plane0æ╥ö≡
- adda.l #$20000-128*16,a2
- bsr move_textblock ; 1
- * move.l a2,-(sp)
- * move.l a3,-(sp)
-
- ;èYôûìsé≡âNâèâA
- move.l #(WIDTH-1).shl.16+0,(CSRXMAX)
- clr.b (FIRSTBYTE)
- moveq #2,d1
- IOCS _B_CLR_ST ëµû╩æSæ╠é≡Å┴ïÄ
- move.b #2,(TXCOLOR) É┬é┼ò\Ī
- IOCS _B_PRINT prompt
- addq.b #1,(TXCOLOR) öÆ
-
- move (sp)+,d1 ;!
- lsl #2,d1
- .if 0
- bsr clear_text_raster_m4 ;ôⁿù═ìsé╠â}âEâXâvâîü[âôé≡âNâèâAé╖éΘ
- .else
- moveq #0,d0 ;â}âXâNé═ò`é½Æ╝é│é╚éó
- moveq #4-1,d2
- bsr clear_text_raster
- .endif
-
- .if 0
- bsr gm_inactive
- .endif
- bsr fep_enable
-
- btst #3,(option_m_flag,pc)
- bne @f
- IOCS _OS_CURON
- @@:
- lea (general_work,pc),a1
- move #GETSMAX.shl.8,(a1)
- move.l a1,-(sp)
- DOS _GETSS
- addq.l #4,sp
-
- btst #3,(option_m_flag,pc)
- bne @f
- IOCS _OS_CUROF
- @@:
- bsr fep_disable
- .if 0
- bsr gm_active
- .endif
- bsr clear_message ;â}âEâXâvâîü[âôé╠ò£ïA
-
- * æ╥ö≡é╡é╜âeâLâXâgé≡î│é╔û▀é╖
- * movea.l (sp)+,a2
- * movea.l (sp)+,a3
- exg a2,a3
- bsr move_textblock âvâîü[âô1 é≡ò£ïA
- suba.l #$20000-128*16,a3
- bsr move_textblock üV 0
-
- move.b (sp)+,(LEDSTAT)
- IOCS _LEDSET
- move.b (1,sp),(TXCOLOR) IOCSworkò£ïA
- move.b (sp)+,(FIRSTBYTE)
- move.l (sp)+,(CSRX)
- move.l (sp)+,(CSRXMAX)
- move.l (sp)+,(TXSTOFST)
- move.l (sp)+,(TXADR)
-
- * tst.b (sp)+
- * bne @f
- * bsr toggle_buffering_mode
- *@@:
- * bclr #GETSS_bit,(bitflag-condrv_put_char,a5)
- move (sp)+,(a5) ;pop stop_level
-
- lea (general_work+1,pc),a1
- tst.b (a1)+ ôⁿù═ò╢ÄÜÉö
- POP usereg
- rts
-
- move_textblock:
- moveq #(128*16)/(4*8)-1,d0
- @@:
- movem.l (a2)+,d1-d7/a4
- movem.l d1-d7/a4,-(a3)
- dbra d0,@b
- rts
-
-
- * GMé╠ɺîΣò√û@é≡ò╧éªé╜ê╫üAê╚ë║é╠gm_(in)activeé═òsùvé╔é╚é┴é╜(97/09/21).
-
- .if 0
-
- * GM é¬ÅφÆôé╡é─éóé╜éτêΩÄ₧ôIé╔ô«ì∞é≡ÆΓÄ~é│é╣éΘ. d0-d1/a1 öjë≤
- * gm_automaské≡ÆΓÄ~âtâëâOé╔ù¼ùp.
-
- gm_inactive:
- lea (gm_automask,pc),a1
- clr.b (a1)
-
- GMcall _GM_VERSION_NUMBER
- bne gm_inactive_end ;ûóÅφÆô
-
- GMcall _GM_ACTIVE_STATE
- tst.l d0
- beq gm_inactive_end ;è∙é╔ÆΓÄ~Æå
-
- st (a1)
- GMcall _GM_INACTIVE
- gm_inactive_end:
- rts
-
- * GM é≡ÆΓÄ~é│é╣é─éóé╜éτô«ì∞é≡ì─èJé│é╣éΘ
- gm_active:
- move.b (gm_automask,pc),d0
- beq gm_active_end ;ÅφÆôé╡é─éóé╚éóé⌐üAï╓Ä~é╡é─éóé╚éó
- GMcall _GM_ACTIVE
- gm_active_end:
- * bra clear_message
- rts
-
- .endif
-
-
- * âoâbâNâìâOëµû╩ì┼ë║ìsé╠ò╢ÄÜù±é≡Å┴ïÄé╖éΘ ------ *
-
- clear_message:
- usereg: .reg d0-d3/a1
- PUSH usereg
-
- move.b (down_line+1,pc),-(sp)
- move (sp),d1
- move.b (sp)+,d1
- add.b (window_line+1,pc),d1
- addq #2,d1
- lsl #2,d1
- moveq #1,d2
- moveq #%1100,d3
- IOCS _TXRASCPY
-
- move.b d1,-(sp)
- move (sp),d1
- move.b (sp)+,d1
- addq.b #1,d1 ;é╗éΩé≡é╖é«ë║é╔âRâsü[
- moveq #3,d2
- IOCS _TXRASCPY
-
- lea (mes_end_adr,pc),a1
- clr.l (a1)
- POP usereg
- rts
-
- ; in d1.w ï@ö\ö╘ìå(d1.hw=-1)
- ; out d0.hw ò╘Æl
- gm_tgusemd:
- addi.l #(_GM_INTERNAL_MODE+1).shl.16,d1
- IOCS _TGUSEMD
- subi #_GM_INTERNAL_MODE,d0
- rts
-
- * FEP é¬âIü[âvâôÅoùêéΘéµéñé╔é╖éΘ
- fep_enable:
- lea (fepctrl_mode,pc),a4
- clr.l (a4)
- pea (2) é⌐é╚è┐ÄÜò╧è╖âéü[âhé╠Ä√ô╛
- DOS _KNJCTRL
- btst #FEPOPEN_bit,(bitflag,pc)
- beq @f
- move.l d0,(a4) ê╚æOé╠é⌐é╚è┐ÄÜò╧è╖âéü[âh
- @@:
- * pea (8) é⌐é╚è┐ÄÜò╧è╖âéü[âhî┼ÆΦÅ≤æ╘é╠Ä√ô╛
- addq.l #8-2,(sp)
- DOS _KNJCTRL
- move.l d0,-(a4) fepctrl_lock
- * pea (1) î┼ÆΦë≡Å£
- subq.l #8-1,(sp)
- pea (7)
- DOS _KNJCTRL
- addq.l #8,sp
- rts
-
- * FEP é╠Å≤æ╘é≡î│é╔û▀é╖
- fep_disable:
- lea (fepctrl_lock,pc),a4
- move.l (a4)+,-(sp)
- pea (7)
- DOS _KNJCTRL âìâbâNâéü[âhé≡î│é╔û▀é╖
- btst #FEPOPEN_bit,(bitflag,pc)
- beq @f
- move.l (a4),(4,sp) fepctrl_mode
- subq.l #7-1,(sp)
- DOS _KNJCTRL ò╧è╖âéü[âhé≡î│é╔û▀é╖
- @@:
- addq.l #8,sp
- rts
-
- * ì┼ë║ìsâüâbâZü[âWò\Ī/Å┴ïÄ ----------- *
-
- * ê╚æOé╠ò\Īé╠ì┼îπé⌐éτÆ╟ë┴é┼ò╢ÄÜù±é≡ò\Īé╖éΘ
- print_message_cont:
- usereg .reg d0-d2/a0-a2
- PUSH usereg
- movea.l (mes_end_adr,pc),a0
- bra print_m_loop
-
- * âoâbâNâìâOëµû╩ì┼ë║ìsé╔ò╢ÄÜù±é≡ò\Īé╖éΘ
- * in a1.l = ò\Īé╖éΘò╢ÄÜù±
- print_message:
- PUSH usereg
- movea.l (text_address,pc),a0
- move (window_line,pc),d0
- swap d0
- clr d0
- lsr.l #5,d0 *128*16
- adda.l d0,a0 ü½ö╝èpâXâyü[âXé≡ò\Īé╡é╜é▒é╞é╔é╖éΘ
- lea (128*(16+8)+1,a0),a0
- print_m_loop:
- move a0,d0
- cmpi.b #WIDTH,d0 ëµû╩ëEÆ[é▄é┼éóé┴é╜éτüAé╗éΩê╚Åπò\Īé╡é╚éó
- bcc print_message_end
-
- moveq #0,d1
- move.b (a1)+,d1
- beq print_message_end
- lea (ctype_table,pc),a2
- tst.b (a2,d1.w) MULTIBYTE
- bpl @f 1byte
-
- lsl #8,d1
- move.b (a1)+,d1
- beq print_message_end
- @@:
- moveq #8,d2
- IOCS _FNTADR
- movea.l d0,a2
- tst d1
- bne draw_multibyte
- @@:
- move.b (a2)+,(a0)
- lea (128,a0),a0
- dbra d2,@b
- lea (-128*16+1,a0),a0
- bra print_m_loop
- print_message_end:
- lea (mes_end_adr,pc),a1
- move.l a0,(a1)
- POP usereg
- rts
-
- draw_multibyte:
- move.b (a2)+,(a0)+
- move.b (a2)+,(a0)
- lea (128-1,a0),a0
- dbra d2,draw_multibyte
- lea (-128*16+2,a0),a0
- bra print_m_loop
-
- * CONDRV.SYS System Call ---------------------- *
-
- condrv_system_call:
- usereg .reg d1-d7/a0-a6
- PUSH usereg
- lea (syscall_table,pc),a0
- @@:
- move (a0)+,d2 address
- beq syscall_error1
- cmp (a0)+,d0 code
- bne @b
- adda d2,a0
- jsr (a0)
- syscall_return:
- POP usereg
- rts
- syscall_error1:
- moveq #-1,d0
- bra syscall_return
-
- SYSTBL: .macro %callno
- .dc syscall_%callno-($+4),$%callno
- .endm
-
- syscall_table:
- SYSTBL 0000
- SYSTBL 0010
- SYSTBL 0020
- SYSTBL 0021
- SYSTBL 0022
- SYSTBL 0023
- SYSTBL 0024
- SYSTBL ffff
- .dc 0
-
- syscall_0000:
- move #RTS,d0
- tst d1
- beq @f
- move #MOVEM,d0
- @@:
- lea (condrv_put_char,pc),a1
- cmp (a1),d0
- beq @f
-
- bsr toggle_buffering_mode
- syscall_0010:
- @@: moveq #0,d0
- rts
-
- syscall_0020:
- lea (key_init_orig,pc),a0
- move.l (a0),d0 î│é╠Åêù¥âAâhâîâX
- move.l a1,(a0) ÉVé╡éóÅêù¥âAâhâîâXé≡É▌ÆΦ
- rts
-
- syscall_0021:
- lea (key_init_orig,pc),a0
- cmpa.l (a0),a1 î╗ì▌é╠Åêù¥âAâhâîâXé≡É│é╡é¡Æmé┴é─éóéΘé⌐üH
- bne syscall_error2
- move.l a2,(a0) ê╚æOé╠âAâhâîâXé╔û▀é╖
- moveq #0,d0
- rts
-
- syscall_0022:
- move.l (key_init_orig,pc),d0
- rts
-
- syscall_0023:
- lea (bufmod_stack,pc),a0
- move.l (a0)+,d0
- move.b (a0),d3 bufmod_height
- tst d1
- bne syscall_0023_push
-
- subq.b #1,d3
- bmi syscall_0023_pop
- syscall_error2:
- moveq #-2,d0
- rts
- syscall_0023_pop:
- move.b d3,(a0)
-
- btst d3,d0
- sne d1
- ext d1
- bra syscall_0000
- syscall_0023_push:
- cmpi.b #31,d3
- beq syscall_error2 âXâ^âbâNé¬û₧öté╚é╠é╔ PUSH é╡éµéñé╞é╡é╜
- bset d3,d0
- lea (condrv_put_char,pc),a1
- cmpi #RTS,(a1)
- bne @f
- bchg d3,d0
- @@:
- addq.b #1,d3
- move.b d3,(a0)
- move.l d0,-(a0)
- moveq #0,d0
- rts
-
- syscall_0024:
- lea (stop_level,pc),a0
- tst d1
- beq syscall_0024_get
- bmi syscall_0024_minus
- *syscall_0024_plus:
- cmpi #$ffff,(a0)
- beq syscall_0024_error
- addq #1,(a0)
- bra syscall_0024_get
- syscall_0024_minus:
- tst (a0)
- beq syscall_0024_error
- subq #1,(a0)
- bra syscall_0024_get
- syscall_0024_get:
- moveq #0,d0
- move (a0),d0
- rts
- syscall_0024_error:
- moveq #-1,d0
- rts
-
- syscall_ffff:
- move.l #VERSION_ID,d0
- rts
-
- ; âfâoâCâXÅëè·ë╗âïü[â`âô ---------------------- *
-
- general_work:
- xcon_init:
- usereg .reg d1-d7/a0-a3/a6
- PUSH usereg
-
- * condrv.sysé≡ô±Ådôoÿ^é╡é─éóé╚éóé⌐Æ▓é╫éΘ
- clr -(sp)
- pea (xcon_filename,pc)
- DOS _OPEN
- addq.l #6,sp
- move.l d0,d1
- bmi double_check_ok
-
- move d1,-(sp)
- clr -(sp)
- DOS _IOCTRL
- addq.l #4,sp
- tst d0
- lea (double_include_err_mes,pc),a2
- bmi print_error_and_return
- double_check_ok:
- lea (option_flag,pc),a6
-
- *èeÄφâeü[âuâïé╠Åëè·ë╗
- lea (case_table+256,pc),a0
- move #256-1,d0
- @@: move.b d0,-(a0)
- dbra d0,@b
-
- lea (ctype_table+'0',pc),a0
- moveq #10-1,d0
- moveq #IS_HEXNUMBER+IS_DECIMAL,d1
- @@: move.b d1,(a0)+
- dbra d0,@b
- lea (ctype_table+'A',pc),a0
- moveq #6-1,d0
- moveq #IS_HEXNUMBER,d1
- @@: move.b d1,('a'-'A',a0)
- move.b d1,(a0)+
- dbra d0,@b
-
- lea (ctype_table+$80,pc),a0
- moveq #$20-1,d0
- @@: tas ($e0-$80,a0) $e0-$ff
- tas (a0)+ $80-$9f
- dbra d0,@b
-
- lea (end_,pc),a3
- move.l a3,(DEVIO_ENDADR,a5)
- movea.l (DEVIO_ARGUMENT,a5),a2
- bsr option_check
- bsr initialize_keypast_buffer
-
- lea (hook_table_top,pc),a0 èeÄφâxâNâ^âtâbâN
- move.l (buffer_size,pc),d0
- bne hook_loop_start OK
-
- lea (no_buf_err_mes,pc),a2 * -b é¬ÄwÆΦé│éΩé╚é⌐é┴é╜ÅΩìçé═ÅφÆôé╡é╚éó
- move.b (no_mem_flag,pc),d0
- beq print_error_and_return
- lea (no_mem_err_mes,pc),a2 * âüâéâèé¬æ½éΦé╚éóÅΩìç
- print_error_and_return:
- bsr print_title
- lea (a2),a1
- jsr (a3)
- move #$700d,d0 âGâëü[é╠ÅΩìçé═é▒é╠Ælé≡ò╘é╖éτé╡éó
- bra devini_exit
-
- hook_loop:
- movea d0,a1
- move.l (a0),d0
- move.l (a1),(a0)+ î╗ì▌é╠Åêù¥âAâhâîâXé≡ò█æ╢
- lea (top_,pc),a2
- adda d0,a2
- move.l a2,(a1) ÉVé╡éóÅêù¥âAâhâîâXé≡É▌ÆΦ
- hook_loop_start:
- move (a0),d0
- bne hook_loop
-
- * ëⁿìsé╣é╕é╔âèâZâbâgé┼ì─ïNô«é╡é╜ÅΩìçé┼éαüAâ^âCâgâïé╠æOé╔êΩìsï≤é¡éµéñé╔é╖éΘ.
- movea.l (backscroll_buf_adr,pc),a0
- movea.l (buffer_now+4,a0),a0
- tst.b (a0)
- beq @f
-
- moveq #LF,d1
- bsr condrv_put_char_force
- @@:
- bsr print_title
-
- lea (initmes1,pc),a1 âoâbâNâXâNâìü[âïâoâbâtâ@ü`
- jsr (a3)
- move.l ($1c00),d1 âoâbâtâ@ɵô¬âAâhâîâX
- bsr print_hexadecimal
-
- move #'-',-(sp)
- DOS _PUTCHAR
-
- moveq #32,d1
- add.l (buffer_size,pc),d1
- bsr print_kiro_decimal
-
- lea (initmes2,pc),a1
- btst #BUFINIT_bit,(bitflag,pc)
- beq @f
- lea (initmes3,pc),a1 âoâbâtâ@é≡Åëè·ë╗é╡é╜ÅΩìç
- @@: jsr (a3)
-
- lea (initmes4,pc),a1 âLü[â{ü[âhâoâbâtâ@ü`
- jsr (a3)
- move.l (pastbuf_adr,pc),d1
- bsr print_hexadecimal
-
- * move #'-',(sp)
- DOS _PUTCHAR
-
- move.l (pastbuf_size,pc),d1
- bsr print_kiro_decimal
-
- lea (initmes5,pc),a1 ü`èmò█é╡é▄é╡é╜
- jsr (a3)
-
- move.l #$e_ffff,-(sp) ! ò\Ī
- DOS _CONCTRL
- addq.l #4+2,sp
-
- move.b (option_o_flag,pc),d1
- subq.b #3,d1 OPT.2
- bne @f
- IOCS $0b OPT.2 é═âeâîârâRâôâgâìü[âïé╔é╡é╚éó
- @@:
- moveq #0,d0
- devini_exit:
- POP usereg
- rts
-
- print_title:
- lea (title_mes,pc),a1
- lea (@f,pc),a3
- @@:
- move.l a1,-(sp)
- DOS _PRINT
- addq.l #4,sp
- @@:
- rts
-
- option_end:
- movea.l (sp)+,a2
- option_check:
- tst.b (a2)+
- bne option_check Ä⌐ò¬é╠âtâ@âCâïû╝orìíî⌐é╜ê°Éö
- move.b (a2)+,d0
- beq @b 0,0 é┼ÅIéφéΦ
- move.l a2,-(sp)
- cmpi.b #'-',d0
- bne option_end
- next_option:
- move.b (a2)+,d0
- beq option_end
- ori.b #$20,d0
- lea (option_tbl,pc),a0
- @@:
- move.l (a0)+,d1
- beq option_end ûóÆΦï`é╠âIâvâVâçâô
- cmp.b d0,d1
- bne @b
- swap d1
- adda d1,a0
- jmp (a0)
- *ê°Éöé≡Ä¥é╜é╚éóâIâvâVâçâôé═æ▒é»é─Åæé¡é▒é╞é¬é┼é½éΘéµéñé╔üAò¬è≥îπé═
- *É│Åφé╚ê°Éö bra next_option
- *ê┘ÅφüV(ăé╠ê°Éöé▄é┼û│Äï) bra option_end
-
- option_tbl:
- .irpc %a,abcfhjkmnoprtvwx
- .dc (option_%a-$-4),'&%a'
- .endm
- .dc.l 0
-
- option_p:
- lea (option_p_flag,pc),a0
- bra @f
- option_r:
- lea (option_r_flag,pc),a0
- bra @f
- option_t:
- lea (option_t_flag,pc),a0
- bra @f
- @@:
- not.b (a0)
- bra next_option
-
- option_x:
- bsr toggle_buffer_mode_x
- bra next_option
-
- option_m:
- lea (option_m_flag,pc),a0
- bsr get_value
- bmi @b ÉöÆlÅ╚ù¬Ä₧é═ö╜ô]
- move.b d1,(a0)
- bra next_option
-
- option_n:
- move.b (a2)+,d0
- beq option_end
- ori.b #$20,d0
- lea (option_n_list,pc),a0
-
- cmp.b (a0)+,d0 ;-nb:BS Åêù¥
- bne @f
- bsr toggle_option_nb
- bra option_n
- @@:
- cmp.b (a0)+,d0 ;-nc:ɺîΣïLìåìφÅ£
- bne @f
- bsr toggle_option_nc
- bra option_n
- @@:
- cmp.b (a0)+,d0 ;-ne:ESCìφÅ£
- bne @f
- bsr toggle_option_ne
- bra option_n
- @@:
- cmp.b (a0)+,d0 ;-nt:TAB->SPACE
- bne @f
- bsr toggle_option_nt
- @@:
- bra option_n
-
- option_a:
- lea (ras_int_adr,pc),a0
- bra @f
- option_v:
- lea (vdisp_int_adr,pc),a0
- @@:
- lea (dummy_rte,pc),a1
- move.l a1,(a0)
- bra next_option
-
- option_h:
- lea (default_past_header,pc),a0
- move.b (a2)+,d0
- beq @f Å╚ù¬é╡é╜ÅΩìçé═ì┼Åëé⌐éτ>é¬É▌ÆΦé│éΩé─éóéΘ
- move.b d0,(a0)
- @@:
- move.b (a0),(past_header-option_flag,a6)
- bra option_end
-
- option_o:
- moveq #$20,d0
- or.b (a2)+,d0 ;nulîƒì╕é═òsùv...
-
- lea (option_o_list,pc),a0
- moveq #3,d1
- @@:
- cmp.b (a0)+,d0
- dbeq d1,@b
- bne @f
-
- move.b d1,(option_o_flag-option_flag,a6)
- @@: bra option_end
-
- option_c:
- bsr toggle_buffering_mode
- bra next_option
-
- option_f:
- moveq #OPT_F_bit,d2
- bsr get_value
- bmi option_fj_chg -f
- tst d1
- beq option_fj_chg -f0
-
- move.b d1,(option_f_col-option_flag,a6) ò\ĪÉFÄwÆΦ
- bra @f
-
- option_j:
- moveq #OPT_J_bit,d2
- option_fj_chg:
- bchg d2,(a6)
- @@: bra next_option
-
- option_b:
- cmpi.b #'#',(a2)
- sne d2 d2.b==0é┼Åëè·ë╗é╖éΘ
- bne @f
- addq.l #1,a2
- @@:
- bsr get_value
- bmi @f ;û│ÄwÆΦ
- move.l (buffer_size,pc),d0
- @@:
- bne next_option ;ÄwÆΦì╧é▌
-
- mulu #1024,d1 KBÆPê╩
- movea.l ($1c00),a0 âüâCâôâüâéâèûûö÷
- suba.l d1,a0
- bcs @f
- lea (a0),a1
- suba.l (DEVIO_ENDADR,a5),a1
- bcs @f
- cmpa.l #$80000,a1
- @@:
- scs (no_mem_flag-option_flag,a6)
- bcs @f 512KB Äcéτé╚éóé╚éτû│Äï
- moveq #32,d0 è╟ù¥Åεò±é╠ò¬âoâbâtâ@É│ûíé═Å¡é╚é¡é╚éΘ
- sub.l d0,d1
- bmi @f -b0 é╠ÅΩìç
-
- move.l d1,(buffer_size-option_flag,a6)
- move.l a0,($1c00) âüâéâèé≡ìφéΘ
- move.l a0,(backscroll_buf_adr-option_flag,a6)
-
- SFTbtst SFT_SHIFT
- bne buffer_clear_start
- tst.b d2 -b#n
- beq buffer_clear_start
- cmpi.l #'hmk*',(a0)+
- beq @f öjë≤é│éΩé─éóé╚éóé╚éτÅëè·ë╗é╡é╚éó
- buffer_clear_start:
- bsr initialize_backscroll_buffer
- bset #BUFINIT_bit,(bitflag-option_flag,a6)
- @@:
- move.l (buffer_now,a0),(line_buf-option_flag,a6)
- bra next_option
-
- option_k:
- bsr get_value
- bmi @f
- cmpa.l (DEVIO_ENDADR,a5),a3
- bne @f ò╧ìXì╧é▌
- subq #1,d1
- bls @f 1ê╚ë║
-
- mulu #1024,d1
- movea.l ($1c00),a0
- suba.l d1,a0
- suba.l a3,a0 a3 = âfâoâCâXâhâëâCâoé╠ûûö÷
- cmpa.l #$80000,a0
- bcs @f
- add.l d1,(pastbuf_size-option_flag,a6)
- add.l d1,(DEVIO_ENDADR,a5)
- @@:
- bra next_option
-
- option_w:
- bsr get_value èJÄnê╩Æu
- bmi option_w_end
-
- move d1,d2
- moveq #0,d1
- cmpi.b #',',(a2)
- bne @f
-
- addq.l #1,a2
- bsr get_value ìsÉö
- bmi option_w_end
- @@:
- cmpi #4,d2
- bcs option_w_end 4 ê╚ë║é═û│Äï
- move d2,d0
- cmpi #28,d0
- bcc option_w_end 28 ê╚Åπé═û│Äï
-
- move d2,(window_line-option_flag,a6)
- bra @f
- option_w_loop:
- move (down_line,pc),d0
- add (window_line,pc),d0
- cmpi #28,d0
- bcc option_w_end êΩö╘ë║é▄é┼ìsé┴é╜ÅΩìç
-
- lea (text_address,pc),a0
- addi.l #$800,(a0)+
- addi #$404,(a0)+
- addq #1,(a0)
- @@:
- dbra d1,option_w_loop
- option_w_end:
- bra next_option
-
- print_hexadecimal:
- lea (str_buf,pc),a1
- print_hex_loop:
- moveq #$f,d0
- and d1,d0
- addi #'0',d0
- cmpi #'9',d0
- bls @f
- .ifdef __UPPER
- addq #'A'-('9'+1),d0
- .else
- addi #'a'-('9'+1),d0
- .endif
- @@:
- move.b d0,-(a1)
- lsr.l #4,d1
- bne print_hex_loop
- jmp (a3) print
-
- print_kiro_decimal:
- lea (str_buf,pc),a1
- moveq #10,d0
- lsr.l d0,d1 KBÆPê╩é╔é╖éΘ
- @@:
- divu d0,d1
- swap d1
- addi #'0',d1
- move.b d1,-(a1)
- clr d1
- swap d1
- bne @b
- jmp (a3) print
-
- * ÉöÆlÄ√ô╛
- get_value:
- bsr is_number
- move d0,d1
- bpl @f
- * moveq #-1,d0
- rts
- get_value_loop:
- mulu #10,d1
- add d0,d1
- @@:
- bsr is_number
- bpl get_value_loop
- moveq #0,d0
- rts
-
- is_number:
- move.b (a2)+,d0
- subi.b #'0',d0
- cmpi.b #9,d0
- bhi @f
-
- ext d0
- rts
- @@:
- subq.l #1,a2
- moveq #-1,d0
- rts
-
- command_exec:
- DOS _EXIT
-
- * Data Section -------------------------------- *
-
- .data xcon_inité⌐éτé≡ì∞ï╞ù╠êµé╔Ägùpé╖éΘê╫üA
- .even é╚éΘé╫é¡Åπé╠ò√é╔öjë≤é│éΩé─éαéóéóéαé╠é≡Æué¡
- title_mes:
- .dc.b CR,LF
- .dc.b 'Console driver version ',VERSION
- .ifdef __EMACS
- .dc.b '[em]'
- .endif
- .dc.b ' / Copyright 1990 ö┌ûφî─üÖ, ',DATE,' ',AUTHOR,'.',CR,LF
- str_buf: .dc.b 0
- xcon_filename: .dc.b 'XCON',0
-
- double_include_err_mes:
- .dc.b 'âhâëâCâoé═è∙é╔ôoÿ^é│éΩé─éóé▄é╖.',CR,LF,0
- no_buf_err_mes:
- .dc.b 'âoâbâNâXâNâìü[âïâoâbâtâ@é╠ùeù╩é¬ÄwÆΦé│éΩé─éóé▄é╣é±.',CR,LF,0
- no_mem_err_mes:
- .dc.b 'âüâéâèé¬æ½éΦé▄é╣é±.',CR,LF,0
-
- initmes1: .dc.b 'âoâbâNâXâNâìü[âïâoâbâtâ@($',0
- initmes2: .dc.b 'KB)é═Åëè·ë╗é╡é▄é╣é±.',CR,LF,0
- initmes3: .dc.b 'KB)é≡Åëè·ë╗é╡é▄é╡é╜.',CR,LF,0
- initmes4: .dc.b 'âLü[â{ü[âhâoâbâtâ@($',0
- initmes5: .dc.b 'KB)é≡èmò█é╡é▄é╡é╜.',CR,LF,0
-
- option_o_list: .dc.b '21cs'
- option_n_list: .dc.b 'bcet'
-
- * é▒é▒éµéΦÅπæñé═öjë≤ë┬ö\é╚ò╢ÄÜù± -------------- *
-
- condrv_pal: .dc.b 'CONDRV.PAL',0
- env_home: .dc.b 'HOME',0
-
- search_forward_mes:
- .dc.b ' æOò√îⁿîƒì⌡ò╢ÄÜù±:',0
- search_backward_mes:
- .dc.b ' îπò√îⁿîƒì⌡ò╢ÄÜù±:',0
- searching_mes:
- .dc.b 'îƒì⌡Æå',0
- not_found_mes:
- .dc.b 'î⌐é┬é⌐éΦé▄é╣é±',0
- isearch_mes_1:
- .dc.b 'isearch [',0
- isearch_mes_2:
- .dc.b ']:',0
-
-
- write_file_prompt:
- .dc.b ' âtâ@âCâïÅæé½Åoé╡:',0
- insert_file_prompt:
- .dc.b ' âtâ@âCâïô╟é▌ì₧é▌:',0
- disk_notready_mes:
- .dc.b 'âfâBâXâNé¬ûóæ}ôⁿé┼é╖',0
- .even
- file_io_disable_mes:
- .dc 0
- .dc.b 'ù═òsë┬ö\é╚âfâoâCâXé┼é╖',0
-
- fopen_err_mes_tbl:
- .dc.b $fe,'âtâ@âCâïé¬æ╢ì▌é╡é▄é╣é±',0
- .dc.b $fd,'âfâBâîâNâgâèé¬æ╢ì▌é╡é▄é╣é±',0
- .dc.b $fc,'FCB é¬òsæ½é╡é─éóé▄é╖',0
- .dc.b $fb,'âfâBâîâNâgâè/â{âèâàü[âÇâëâxâïé═âIü[âvâôÅoùêé▄é╣é±',0
- .dc.b $f3,'âtâ@âCâïû╝é¬ê┘Åφé┼é╖',0
- .dc.b $f1,'âhâëâCâuû╝é¬ê┘Åφé┼é╖',0
- .dc.b $ed,'Åæé½ì₧é▌òsë┬ö\é╚âtâ@âCâïé┼é╖',0
- .dc.b $e9,'âfâBâXâNé╠ùeù╩é¬òsæ½é╡é─éóé▄é╖',0
- .dc.b $e8,'âfâBâîâNâgâèé╔ï≤é½é¬éáéΦé▄é╣é±',0
- .dc.b $df,'âtâ@âCâïé¬âìâbâNé│éΩé─éóé▄é╖',0
- .dc.b $dd,'âVâôâ{âèâbâNâèâôâNé╠âlâXâgé¬É[é╖é¼é▄é╖',0
- fopen_err_mes: .dc.b $00,'âtâ@âCâïé¬âIü[âvâôÅoùêé▄é╣é±(é╗é╠æ╝é╠âGâëü[)',0
-
- toggle_buffer_mode_mes:
- .dc.b 'É▌ÆΦò╧ìX(B:BSÅêù¥ C:ɺîΣïLìåìφÅ£ E:ESCìφÅ£ I:TABò╧è╖ T:Tabò\Ī R:ëⁿìsò\Ī X:îƒì⌡âéü[âh):',0
- toggle_text_mode_mes:
- .dc.b 'É▌ÆΦò╧ìX(1:â}âEâXɺîΣ 2:âeâLâXâgò█æ╢ 3:âeâLâXâgÄgùpÅ≤ï╡û│Äï 4:âJü[â\âïɺîΣù}ɺ):',0
- set_mark_mes:
- .dc.b 'set-mark.',0
-
-
- .ifndef __EMACS
- define_label_mes:
- .dc.b 'âëâxâïÆΦï`(',0
- jump_label_mes:
- .dc.b 'âëâxâïâWâââôâv(',0
- label_mes_end:
- .dc.b '):',0
- .endif
-
- .ifdef __EMACS
- no_mark_err_mes:
- .dc.b 'â}ü[âNé¬É▌ÆΦé│éΩé─éóé▄é╣é±',0
-
- prefix_meta_mes: .dc.b 'Meta',0
- prefix_ctrlx_mes: .dc.b 'C-x',0
-
- ise_fnc_tbl:
- .dc.b 21,$ff,1,0 ROLL UP
- .dc.b 22,$ff,2,0 ROLL DOWN
- .dc.b 24,$ff,3,0 DEL
- .dc.b 25,$ff,4,0 ü¬
- .dc.b 26,$ff,5,0 ü⌐
- .dc.b 27,$ff,6,0 ü¿
- .dc.b 28,$ff,7,0 ü½
- .dc.b 29,$ff,8,0 CLR
- .dc.b 30,$ff,9,0 HELP
- .dc.b 31,$ff,10,0 HOME
- .dc.b 32,$ff,11,0 UNDO
- .dc.b 0
-
- .endif
-
- ctrl2scan_table:
- .irpc %a,üùABCDEFGHIJKLMNOPQRSTUVWXYZümü_ünüO_ü@üIühüöüÉüôüòüfüiüjüûü{üCü|üDü^0123456789üFüGüâüüüäüH
- .dc.b KEY_%a
- .endm
-
-
- * ÉöÆlâfü[â^ôÖ -------------------------------- *
-
- .quad
- text_address: .dc.l $e60400 ;âoâbâNâXâNâìü[âïâEâBâôâhâEé╠ì╢ÅπâAâhâîâX
- text_ras_no: .dc $202 ;âëâXâ^ö╘ìå
- down_line: .dc 0 ;ë║é╔ê┌ô«é╡é╜ìsÉö
- window_line: .dc 28 ;âoâbâNâXâNâìü[âïâEâBâôâhâEé╠ìsÉö-1
-
- putbuf_column: .dc.b WIDTH ;âoâbâtâ@Åæì₧îàÉö
-
- default_past_header:
- .dc.b '>'
- option_f_col: .dc.b 3 ;IOCS _B_PUTMES é╠ÉF
- option_o_flag: .dc.b 2
-
-
- * â^âu/ëⁿìsïLìåâtâHâôâg ----------------------- *
-
- .ifdef __EM_FONT_TAB
-
- * TAB èJÄnâtâHâôâg
- tab_font_1:
- .dc.b %00000000 ;MicroEMACS âtâHâôâg
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00011000
- .dc.b %00010100
- .dc.b %00011000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- * TAB âtâHâôâg
- tab_font_2:
- .dc.b %00000000 ;MicroEMACS âtâHâôâg
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00011000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- .else
- tab_font_1:
- .dc.b %00000000 ;âIâèâWâiâï âtâHâôâg
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00100000
- .dc.b %00110000
- .dc.b %00111000
- .dc.b %00111100
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- tab_font_2:
- .dc.b %00000000 ;âIâèâWâiâï âtâHâôâg
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00010000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- ** .dc.b %00000000
- .endif
-
- .ifdef __EM_FONT_CR
- * ëⁿìsâtâHâôâg
- cr_font:
- .dc.b %00000000 ;MicroEMACS âtâHâôâg
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00111100
- .dc.b %00100100
- .dc.b %00100100
- .dc.b %00100111
- .dc.b %00100010
- .dc.b %00100100
- .dc.b %00101000
- .dc.b %00110000
- .dc.b %00100000
- .dc.b %00000000
- .else
- cr_font:
- .dc.b %00000000 ;âIâèâWâiâï âtâHâôâg
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00000000
- .dc.b %00111000
- .dc.b %00111000
- .dc.b %00111110
- .dc.b %00111100
- .dc.b %00111000
- .dc.b %00110000
- .dc.b %00000000
- .dc.b %00000000
- .endif
-
-
- * âwâïâv -------------------------------------- *
-
- .even
- help_mes_top:
- .dc.b 0
- .ifdef __EMACS
- .include condrv_help_em.s
- .else
- .include condrv_help.s
- .endif
- help_mes_last_ofst:
- .dc.b 0 ì┼îπé╠ìsé╠Æ╖é│é═ 0 âoâCâg
- help_mes_last_ptr:
- .dc.b 0 ï≤ìs
- help_mes_end:
- * .dc.b 0 ì┼îπé╠ìsé╠Æ╖é│ é╗é╠éQ(é╚é¡é─éαò╜ïCé╛éδéñ...
-
- .quad
- * .dc.l 'hmk*' ;Ä»ò╩Äq
- help_buf_struct:
- .dc.l help_mes_top âoâbâtâ@ɵô¬
- .dc.l help_mes_top âèâôâOâoâbâtâ@é╠ɵô¬
- .dc.l help_mes_last_ofst î╗ì▌ìsé╠ɵô¬
- .dc.l help_mes_last_ptr Åæé½ì₧é▌â|âCâôâ^
- .dc.l help_mes_end+1 âoâbâtâ@ûûö÷+1
- * .ds.l 2
-
- HOOKTBL: .macro funcno,newadr
- .dc BASE+.low.funcno*4,newadr-top_
- .endm
-
- * âxâNâ^é≡ò╧ìXé╖éΘâèâXâg ---------------------- *
- * Ägùpîπé═âìâôâOâÅü[âhé┼î│é╠âAâhâîâXé≡æ╥ö≡
- .quad
- hook_table_top:
-
- BASE: .set $400
- b_keyinp_orig: HOOKTBL _B_KEYINP ,iocs_b_keyinp
- b_keysns_orig: HOOKTBL _B_KEYSNS ,iocs_b_keysns
- key_init_orig: HOOKTBL _KEY_INIT ,iocs_key_init
- b_putc_orig: HOOKTBL _B_PUTC ,iocs_b_putc
- b_print_orig: HOOKTBL _B_PRINT ,iocs_b_print
- txrascpy_orig: HOOKTBL _TXRASCPY ,iocs_txrascpy
-
- BASE: .set $1800
- hendsp_orig: HOOKTBL _HENDSP ,dos_hendsp
- fnckey_orig: HOOKTBL _FNCKEY ,dos_fnckey
- conctrl_orig: HOOKTBL _CONCTRL ,dos_conctrl
-
- .dc 0 * end of table
-
- * Block Storage Section ----------------------- *
-
- .bss
- .quad
-
- .ifndef __EMACS
- label_buffer: .ds.l 26
- .endif
- xcon_req_adr: .ds.l 1
- .ifdef __XCONC
- xconc_req_adr: .ds.l 1
- .endif
-
- fepctrl_lock: .ds.l 1
- fepctrl_mode: .ds.l 1
- last_time: .ds.l 1
- mes_end_adr: .ds.l 1
- io_buffer:
- fnckey_buf:
- line_store_buf: .ds.b TEXTSAVESIZE ìsôⁿù═Ä₧é╠î│é╠âeâLâXâgò█æ╢âoâbâtâ@
- case_table: .ds.b 256 ö╝èpżò╢ÄÜ->æσò╢ÄÜò╧è╖âeü[âuâï
- search_string: .ds.b GETSMAX+1 æσò╢ÄÜë╗é╡é╜îƒì⌡ò╢ÄÜù±(2ò╢ÄÜû┌ê╚ì~)
- ctype_table: .ds.b 256
-
- sys_stat_prtbuf:
- .ds.b 1 '!'ò\Īùpâoâbâtâ@
- past_header:
- .ds.b 1
- search_string_buf:
- .ds.b GETSMAX+1 îƒì⌡ò╢ÄÜù±âoâbâtâ@
- isearch_string_buf:
- .ds.b GETSMAX+1
-
- .even
- cursor_blink_count:
- .ds.b 1
- cursor_blink_state:
- .ds.b 1
- iocs_curflg:
- .ds.b 2 IOCSworkæ╥ö≡buffer($992-$993:_OS_CURON/OFF)
- bitflag:
- .ds.b 1 èeÄφâtâëâO
- HELPMODE_bit: .equ 7 : âwâïâvâéü[âh
- AFTERCR_bit: .equ 6 : ëⁿìsÆ╝îπ:âyü[âXâgâwâbâ_Åoù═ùp
- FEPOPEN_bit: .equ 5 : è┐ÄÜò╧è╖æïâIü[âvâôÆå
- **GETSS_bit: .equ 4 : êΩìsôⁿù═Æå
- ISEARCH_bit: .equ 4 : Éïăîƒì⌡é┼êΩò╢ÄÜôⁿù═Æ╝îπ(C-s,C-rôÖé╠ăîƒì⌡Ä₧é═0é╔é╚éΘ)
- NO_FUNC_bit: .equ 3 : âtâ@âôâNâVâçâôâLü["ö±"ò\ĪÆå("!>"ò\Īòsë┬ö\âtâëâO)
- SUSPEND_bit: .equ 2 : âoâbâNâXâNâìü[âïëµû╩é≡èJéóé╜é▄é▄ÅIù╣
- BUFINIT_bit: .equ 1 : âoâbâtâ@Åëè·ë╗ì╧é▌:ægé▌ì₧é▌Ä₧é╠"ü`é≡Åëè·ë╗é╡é▄é╡é╜"ò\Īùp
- BACKSCR_bit: .equ 0 : âoâbâNâXâNâìü[âïâéü[âh
- IS_HELPMODE: .equ %1000_0000
- IS_AFTERCR: .equ %0100_0000
- IS_FEPOPEN: .equ %0010_0000
- **IS_GETSS: .equ %0001_0000
- IS_ISEARCH: .equ %0001_0000
- IS_NO_FUNC: .equ %0000_1000
- IS_SUSPEND: .equ %0000_0100
- IS_BUFINIT: .equ %0000_0010
- IS_BACKSCR: .equ %0000_0001
-
- .quad
- text_pal_buff: .ds 16 âeâLâXâgâpâîâbâgæ╥ö≡âoâbâtâ@
-
- vdisp_int_adr: .ds.l 1 ÉéÆ╝ô»è·èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
- ras_int_adr: .ds.l 1 âëâXâ^èäéΦì₧é▌é┼âtâbâNé╖éΘâAâhâîâX
-
- line_buf: .ds.l 29 ò\ĪÆåé╠ìsé╠âoâbâtâ@âAâhâîâX
- buffer_size: .ds.l 1 âoâbâtâ@ùeù╩-32bytes(è╟ù¥Åεò±é╠ò¬)
- ;æ}ôⁿï╓Ä~
- mark_char_adr: .ds.l 1 â}ü[âNèJÄnê╩Æu
- mark_line_adr: .ds.l 1 â}ü[âNèJÄnìsé╠âoâbâtâ@âAâhâîâX
- ;æ}ôⁿï╓Ä~
- cursorX: .ds 1 âoâbâNâìâOé╠âJü[â\âïéwì└òW
- cursorXbyte: .ds 1 âoâbâNâìâOé╠ìsé╠ì╢Æ[é⌐éτé╠âoâCâgÉö
- cursorY: .ds 1 âoâbâNâìâOé╠âJü[â\âïéxì└òW
- ;æ}ôⁿï╓Ä~
- curx_save: .ds 1 ;ò█æ╢é╡é╜âJü[â\âïéwì└òW
-
- * îƒì⌡ɼî≈Ä₧é╔âZâbâgé│éΩéΘ. Ä╕ösé╡é╜éτsearch_char_adré¬âNâèâAé│éΩéΘ.
- search_char_adr:.ds.l 1 ;âJü[â\âïê╩Æué╠âoâbâtâ@âAâhâîâX
- search_x: .ds 1 ;âJü[â\âïéwì└òW
- search_xbyte: .ds 1 ;ìsé╠ì╢Æ[é⌐éτé╠âoâCâgÉö
-
- last_line_ptr: .ds.l 1 ;&line_buf[last_line]
- last_line_adr: .ds.l 1 ; line_buf[last_line]
- last_line_byte: .ds.b 1 ;*line_buf[last_line]
- .even
-
- xcon_output_hb: .ds 1 XCON é╓é╠Åoù═:2âoâCâgò╢ÄÜé╠Åπê╩(ë║ê╩âoâCâgé═û│Äïé│éΩéΘ)
-
- bufwrite_last: .ds 1 æOë±é╠Åæé½ì₧é▌ò╢ÄÜ
- bufmod_stack: .dc.l 1
- bufmod_height: .ds.b 1
- no_mem_flag:
- gm_automask: .ds.b 1 ;ïûë┬ü¿ï╓Ä~é╔é╡é─éóéΘé╚éτ$ff
- gm_maskflag: .ds.b 1
- ms_ctrl_flag: .ds.b 1 â}âEâXɺîΣé≡é╡é╜Ä₧é╔-1
- skeymod_save: .ds.b 1 ê╚æOé╠â\âtâgâLü[â{ü[âhÅ≤æ╘
- mscur_on_flag: .ds.b 1 â}âEâXâJü[â\âïé≡Å┴ïÄé╡é╜Ä₧-1(îπé┼ò\Īé╖éΘ)
- sleep_flag: .ds.b 1
- curx_save_flag: .ds.b 1 ;Æ╝îπé╔âJü[â\âïê╩Æué≡ò█æ╢é╡é╚éó
-
- .ifdef __EMACS
- prefix_flag: .ds.b 1
- isearch_flag: .ds.b 1
- .else
- ins_clr_flag: .ds.b 1
- .endif
-
- option_m_flag: .ds.b 1 ;bit3=1:âJü[â\âïɺîΣé╡é╚éó
- ;bit2=1:TUSEMDû│Äï
- ;bit1=1:Plane2/3ò█æ╢
- ;bit0=1:MouseɺîΣ
- option_p_flag: .ds.b 1
- option_r_flag: .ds.b 1
- option_t_flag: .ds.b 1
- option_x_flag: .ds.b 1
-
- option_nb_flag: .ds.b 1
- option_nc_flag: .ds.b 1
- option_ne_flag: .ds.b 1
- option_nt_flag: .ds.b 1
-
- .quad
- past_pointer:
- .ds.l 1 âyü[âXâgê╩Æu
- backscroll_buf_adr:
- .ds.l 1 âoâbâtâ@ɵô¬âAâhâîâX
- keypast_buffer:
- .ds.b KBbuf_Default
-
- end_:
- .end command_exec
-
- # î÷èJâÅü[âNé╠ì\æó
- .dc.b -j(bit7),-f(bit0) âtâëâO
- .dc.b 0 .even???
- .dc âyü[âXâgé╠âEâFâCâgâJâEâôâ^
- .dc üV Åëè·Æl
- .dc.l âVâXâeâÇâRü[âïé╠âAâhâîâX
- .dc.b 0 ûóÄgùp???
- .dc.b âEâBâôâhâEâLü[ù}ɺâtâëâO(-1:ù}ɺ)
- .dc.l âoâbâtâ@Åæé½ì₧é▌âïü[â`âôé╠âAâhâîâX
- .dc.l âLü[â{ü[âhâoâbâtâ@é╠Æ╖é│
- .dc.l âLü[â{ü[âhâoâbâtâ@é╠ɵô¬âAâhâîâX
- .dc.l Ä»ò╩Äq'hmk*'
- * IOCS _KEY_INIT
-
- # âLü[â{ü[âhâoâbâtâ@Äⁿò╙é╠ì\æó
- .dc.l âyü[âXâgèJÄnâAâhâîâX
- .dc.l âoâbâNâìâOâoâbâtâ@é╠âAâhâîâX
- * âyü[âXâgâoâbâtâ@
-
- * End of File --------------------------------- *
-